更新操作指更改數據表記錄的單個或者多個字段,下面是示例代碼:
// 更新記錄
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' => '[email protected]'
]);
實際更新的字段只有name,email字段的數據會被忽略。一般來說,update方法用於更新數據的多個字段,如果只是更新某個字段的值,也可以用setField方法,例如:
// 更新記錄
Db::table('data')
->where('id', 8)
->setField('name','framework');
返回值和update方法一致,因為setField最終也是調用的update方法。對於數字類型的字段的步長更新,框架提供了兩個專門的方法用於遞增和遞減操作。
setInc/setDec支持延時寫入,延時寫入的含義是會把需要遞增/遞減的數據緩存起來(在緩存中進行遞增和遞減操作),在達到指定的時間計時後才會把最終計算的緩存數據寫入數據庫,避免頻繁操作數據庫帶來的性能開銷,下例中延時10秒,給score字段增加1:
Db::table('user')
->where('id', 1)
->setInc('score', 1, 10);
setInc和setDec可以同時使用延時寫入,系統會自動計算最終需要寫入數據庫的值。
閱讀更多 行家匯 的文章