## 查找并更新
在取出數據后,更改字段內容后更新數據。
~~~
$user = UserModel::get(1);
$user->user_nickname = '老貓';
$user->user_email = 'genmaowan@163.com';
$user->save();
~~~
## 直接更新數據
也可以直接帶更新條件來更新數據
~~~
$user = new UserModel;
// save方法第二個參數為更新條件
$user->save([
'user_nickname' => '老貓',
'user_email' => 'admin@thinkct.net'
], ['id' => 1]);
~~~
上面兩種方式更新數據,如果需要過濾非數據表字段的數據,可以使用:
~~~
$user = new UserModel();
// 過濾post數組中的非數據表字段數據
$user->allowField(true)->save($_POST,['id' => 1]);
~~~
如果你通過外部提交賦值給模型,并且希望指定某些字段寫入,可以使用:
~~~
$user = new UserModel();
// post數組中只有user_nickname和user_email字段會寫入
$user->allowField(['user_nickname','user_email'])->save($_POST, ['id' => 1]);
~~~
批量更新數據
可以使用saveAll方法批量更新數據,例如:
~~~
$user = new UserModel;
$users = [
['id' => 1, 'user_nickname' => '老貓', 'user_email' => 'genmaowan@163.com'],
['id' => 2, 'user_nickname' => '老貓666', 'user_email' => 'genmaowan666@163.com']
];
$user->saveAll($users);
~~~
## 通過數據庫類更新數據
必要的時候,你也可以使用數據庫對象來直接更新數據,但這樣就無法使用模型的事件功能。
~~~
$user = new UserModel;
$user->where('id', 1)
->update(['user_nickname' => '老貓666']);
~~~
或者使用:
~~~
$user = new UserModel;
$user->update(['id' => 1, 'user_nickname' => '老貓666']);
~~~
如果傳入update的數據包含主鍵的話,可以無需使用where方法。
靜態方法
模型支持靜態方法直接更新數據,例如:
~~~
UserModel::where('id', 1)
->update(['user_nickname' => '老貓666']);
~~~
或者使用:
~~~
UserModel::update(['id' => 1, 'user_nickname' => '老貓666']);
~~~
閉包更新
可以通過閉包函數使用更復雜的更新條件,例如:
~~~
$user = new UserModel;
$user->save(['user_nickname' => '老貓666'],function($query){
// 更新status值為1 并且id大于10的數據
$query->where('status', 1)->where('id', '>', 10);
});
~~~
## 自動識別
我們已經看到,模型的新增和更新方法都是save方法,系統有一套默認的規則來識別當前的數據需要更新還是新增。
實例化模型后調用save方法表示新增;
查詢數據后調用save方法表示更新;
調用模型的save方法后表示更新;
如果你的數據操作比較復雜,可以顯式的指定當前調用save方法是新增操作還是更新操作。
顯式更新數據:
~~~
// 實例化模型
$user = new UserModel;
// 顯式指定更新數據操作
$user->isUpdate(true)
->save(['id' => 1, 'user_nickname' => '老貓666']);
~~~
顯示新增數據:
~~~
$user = UserModel::get(1);
$user->user_nickname = '老貓666';
// 顯式指定當前操作為新增操作
$user->isUpdate(false)->save();
~~~
> 注意不要在一個模型實例里面做多次更新,會導致部分重復數據不再更新,正確的方式應該是先查詢后更新或者使用模型類的update方法更新。
如果你調用save方法進行多次數據寫入的時候,需要注意,第二次save方法的時候必須使用isUpdate(false),否則會視為更新數據。
- 序言
- 基礎
- 功能介紹
- 目錄結構
- 正版申明
- 安裝教程
- 狀態參數
- 第三方接口
- 店鋪狀態
- 控制器
- 控制器定義
- 控制器模板賦值
- 控制器模板渲染
- 前臺控制器
- 前臺用戶控制器
- 后臺控制器
- 跳轉,AJAX返回和重定向
- URL生成
- 請求
- 請求信息
- 輸入變量
- 請求類型
- 獲取請求頭信息
- 偽靜態
- 更多
- 系統函數
- user_info 用戶數據信息
- add_payment 創建支付訂單
- 系統預覽
- 前臺預覽
- 后臺預覽
- 數據庫
- 數據庫配置
- 添加數據
- 更新數據
- 查詢數據
- 刪除數據
- 事務操作
- 更多數據庫操作
- 模型
- 模型定義
- 添加數據
- 更新數據
- 查詢數據
- 刪除數據
- API
- 站點接口
- 滾動幻燈
- 商品列表
- 商品信息
- 購買商品
- 用戶接口
- 個人信息
- 用戶登錄
- 用戶注冊
- 用戶退出
- 充值接口
- 在線充值
- 支付回調
- 訂單接口
- 訂單列表
- 其他接口
- 規范
- 狀態碼說明
- 版本號
- API路由
- 模板標簽
- 模板常量
- 普通標簽
- 變量輸出
- 系統變量
- 請求參數
- 使用函數
- 使用默認值
- 使用運算符
- 三元運算
- 原樣輸出
- 模板注釋
- 模板目錄
- 包含文件
- 模板布局
- 系統標簽
- 全局標簽
- 源碼標簽
- 服務標簽
- 網站標簽
- 域名標簽
- 任務標簽
- 需求標簽
- 推廣標簽
- 菜單標簽
- 內置標簽
- 循環輸出標簽
- 比較標簽
- 條件判斷
- 標簽嵌套
- 原生PHP
- 定義標簽
- 專題
- 緩存
- Session
- Cookie
- 分頁
- 驗證碼
- 文件上傳
- 第三方擴展
- Swoole
- 擴展插件
- 社會化登錄