在ThinkPHP中,setInc
和 setDec
方法是用于对数据库字段进行原子递增或递减操作的快捷方法。这两个方法通常用于更新某个字段的值,而不需要手动编写SQL语句。
然而,setInc
和 setDec
方法并不会自动触发模型的自动时间戳更新机制。也就是说,即使你在模型中定义了 updateTime
字段为自动更新时间戳,使用 setInc
或 setDec
方法时,updateTime
字段也不会自动更新。
ThinkPHP 的自动时间戳更新机制是通过模型的 save
方法触发的。而 setInc
和 setDec
方法是直接通过数据库查询构建器执行的,绕过了模型的 save
方法,因此不会触发自动时间戳更新。
如果你希望在执行 setInc
或 setDec
方法时,updateTime
字段也能自动更新,可以手动更新 updateTime
字段。以下是几种解决方案:
updateTime
字段在执行 setInc
或 setDec
方法后,手动更新 updateTime
字段:
$model->where('id', $id)->setInc('field_name', $step);
$model->where('id', $id)->update(['updateTime' => time()]);
save
方法如果你希望保持自动时间戳更新的功能,可以考虑使用 save
方法来实现递增或递减操作:
$model = Model::find($id);
$model->field_name += $step; // 递增操作
$model->save();
update
方法你也可以直接使用 update
方法,同时更新字段值和 updateTime
:
$model->where('id', $id)->update([
'field_name' => Db::raw('field_name + ' . $step),
'updateTime' => time(),
]);
setInc
和 setDec
方法不会自动更新 updateTime
字段,因为它们直接操作数据库,绕过了模型的 save
方法。如果你需要更新 updateTime
字段,可以手动更新,或者使用 save
方法来实现递增或递减操作。