更新操作指更改資料表記錄的單個或者多個欄位, 下面是示例代碼:
// 更新記錄
Db::table('data')
->where('id', 8)
->update(['name' => "framework"]);
出於資料安全考慮, ThinkPHP的update方法必須使用更新條件而不允許無條件更新, 如果沒有指定更新條件, 則會從更新資料中獲取主鍵作為更新條件, 例如當id是主鍵的時候下面的寫法依然有效:
// 更新記錄
Db::table('data')
->update(['id' => 8, 'name' => "framework"]);
可以過濾需要更新的欄位清單, 例如只允許更新name欄位的值(假設data表還存在email欄位)
// 更新記錄
Db::table('data')
->field(['name'])
->where('id', 8)
->update([
'name' => 'framework',
'email' => 'thinkphp@qq.com'
]);
實際更新的欄位只有name, email欄位的資料會被忽略。 一般來說, update方法用於更新資料的多個欄位, 如果只是更新某個欄位的值, 也可以用setField方法, 例如:
// 更新記錄
Db::table('data')
->where('id', 8)
->setField('name','framework');
返回值和update方法一致, 因為setField最終也是調用的update方法。 對於數位類型的欄位的步長更新, 框架提供了兩個專門的方法用於遞增和遞減操作。
setInc/setDec支持延時寫入, 延時寫入的含義是會把需要遞增/遞減的資料緩存起來(在緩存中進行遞增和遞減操作),
Db::table('user')
->where('id', 1)
->setInc('score', 1, 10);
setInc和setDec可以同時使用延時寫入,
系統會自動計算最終需要寫入資料庫的值。