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可以同时使用延时写入,系统会自动计算最终需要写入数据库的值。


分享到:


相關文章: