ThinkPHP6的inc和dec方法是老版本setInc和setDec的替代方法,用法和之前基本上一致,下面简单记录下用法:
1、inc方法将数字字段值增加,如:
public function update() {
$result = M("User")->where('uid = 2')->inc('score', 3);
if ($result !== false) {
echo '数据更新成功!';
} else {
echo '没更新任何数据!';
}
}
最终执行的SQL语句:
UPDATE user SET score=score+3 WHERE uid=2
inc方法中第一个参数为要修改的字段名称,后一个参数为数字字段增加的值,如果省略则默认增加1 。
2、dec方法将数字字段值减少,如:
public function update() {
$result = M("User")->where('uid = 2')->dec('score', 3);
if ($result !== false) {
echo '数据更新成功!';
} else {
echo '没更新任何数据!';
}
}
最终执行的SQL语句:
UPDATE user SET score=score-3 WHERE uid=2
dec方法中第一个参数为要修改的字段名称,后一个参数为数字字段减少的值,如果省略则默认减少1
inc与dec() 方法也支持连贯操作,从而可以构造更加复杂的更新条件。
3、举例
可以使用inc/dec方法自增或自减一个字段的值( 如不加第二个参数,默认步长为1)。
// score 字段加 1
Db::table('think_user')
->where('id', 1)
->inc('score')
->update();
// score 字段加 5
Db::table('think_user')
->where('id', 1)
->inc('score', 5)
->update();
// score 字段减 1
Db::table('think_user')
->where('id', 1)
->dec('score')
->update();
// score 字段减 5
Db::table('think_user')
->where('id', 1)
->dec('score', 5)
->update();
inc/dec方法可以多次调用更新多个字段,如果你每次只需要更新一个字段,也可以使用setInc/setDec方法。
// score 字段加 1
Db::table('think_user')
->where('id', 1)
->setInc('score');
// score 字段加 5
Db::table('think_user')
->where('id', 1)
->setInc('score', 5);
// score 字段减 1
Db::table('think_user')
->where('id', 1)
->setDec('score');
// score 字段减 5
Db::table('think_user')
->where('id', 1)
->setDec('score', 5);
最终生成的SQL语句可能是:
UPDATE `think_user` SET `score` = `score` + 1 WHERE `id` = 1
UPDATE `think_user` SET `score` = `score` + 5 WHERE `id` = 1
UPDATE `think_user` SET `score` = `score` - 1 WHERE `id` = 1
UPDATE `think_user` SET `score` = `score` - 5 WHERE `id` = 1
4、延迟更新
对于数据表的统计字段,还提供了延迟更新方法,在setInc/setDec方法的第三个参数传入延迟更新的时间(秒)。
// 阅读统计字段延迟600秒写入
Db::table('think_blog')
->where('id', 1)
->setInc('read_count', 1, 600);
// 用户关注数延迟600秒写入
Db::table('think_user')
->where('id', 1)
->setInc('attention', 1, 600);