关于 Laravel increment 与 decrement 不能触发观察者模式的解决方案
有时候在观察者模式中完成一些操作非常方便,比如用户的积分产生变动就一定要有一个用户积分记录。
因为这在任何时候都是必要的,increment 与 decrement 方法是将模型先同步你所要修改的列的值然后执行sql会不触发观察者模式。
下面的方法经过测试是可行的,只是在观察者的updated 事件中你无法取得你加减以后的值,因为他的结果会是这样的
解决方案如下:
$credit = Credit::findOrFail($id);
dumpSQL();
if ($request->type < 0) {
$credit->update([
'num' => DB::raw("num - $request->num"),
]);
}
在 updated() 中打印结果如下
如有错误请指正
本作品采用《CC 协议》,转载必须注明作者和本文链接
不错,get 到了
所有不使用
model
的操作都不会触发观察者:see_no_evil:
可以