您的位置:首頁>正文

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' => 'thinkphp@qq.com'

]);

實際更新的欄位只有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可以同時使用延時寫入, 系統會自動計算最終需要寫入資料庫的值。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示