关于 Laravel increment 与 decrement 不能触发观察者模式的解决方案

    有时候在观察者模式中完成一些操作非常方便,比如用户的积分产生变动就一定要有一个用户积分记录。

    因为这在任何时候都是必要的,increment 与 decrement 方法是将模型先同步你所要修改的列的值然后执行sql会不触发观察者模式。

    下面的方法经过测试是可行的,只是在观察者的updated 事件中你无法取得你加减以后的值,因为他的结果会是这样的

关于laravel increment 与 decrement 不能触发观察者模式的解决方案

解决方案如下:

    $credit = Credit::findOrFail($id);
        dumpSQL();
        if ($request->type < 0) {
            $credit->update([
                'num' => DB::raw("num - $request->num"),
            ]);
        }

在 updated() 中打印结果如下
关于laravel increment 与 decrement 不能触发观察者模式的解决方案

如有错误请指正

本作品采用《CC 协议》,转载必须注明作者和本文链接
Mr.pan
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 4

不错,get 到了

3年前 评论

所有不使用model的操作都不会触发观察者

3年前 评论
刘天承

:see_no_evil:

3年前 评论
pan_zoe (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!