更新操作指更改数据表记录的单个或者多个字段,下面是示例代码:
// 更新记录
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可以同时使用延时写入,系统会自动计算最终需要写入数据库的值。
閱讀更多 行家匯 的文章