ThinkPHP5.0數據庫CURD的更新(Update)操作

更新操作指更改數據表記錄的單個或者多個字段,下面是示例代碼:

// 更新記錄

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方法。對於數字類型的字段的步長更新,框架提供了兩個專門的方法用於遞增和遞減操作。

ThinkPHP5.0數據庫CURD的更新(Update)操作

setInc/setDec支持延時寫入,延時寫入的含義是會把需要遞增/遞減的數據緩存起來(在緩存中進行遞增和遞減操作),在達到指定的時間計時後才會把最終計算的緩存數據寫入數據庫,避免頻繁操作數據庫帶來的性能開銷,下例中延時10秒,給score字段增加1:

Db::table('user')

->where('id', 1)

->setInc('score', 1, 10);

setInc和setDec可以同時使用延時寫入,系統會自動計算最終需要寫入數據庫的值。


分享到:


相關文章: