laravel8 increment 是否支持模型事件

我看文档写的是

当你使用模型中的 increment 和 decrement 方法时,会触发 updating 和 updated 模型事件。而在构造器中直接使用  increment 和 decrement,不会触发模型事件。

我目前是在一个队列里面,用到了increment

   try {
            if($res!=null){
                ImagedownJob::where('id',$this->job_id)->increment('down_count');
               }
            }
        }

可是并没有触发模型事件,有没有大佬能给我讲解一下,是我没有理解到位,还是使用方法错误呢

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

找到问题了,先要有实体模型【实体模型不是说new一个模型就可以了】,参考刚刚上面一位朋友分享的文章仔细看了一下源码,会触及两个属性original 和 attributes 的值进行判断更新操作,也就是说,原实体模型得有值,才能通过更新后的数据判断是否isdirty来判断更新,从而操作模型 ImagedownJob::where('id',$this->job_id)->increment('down_count'); 改为 $model = ImagedownJob::find($this->job_id); $model ->increment();

3年前 评论
讨论数量: 5

只有实体模型才会触发观察者,你这样是直接实行sql,不会走观察者,观察者是模型实体 $modle->save()之类的,传入$model,你这样是没有模型

3年前 评论
channel (楼主) 3年前
$model = ImagedownJob::query()->findOrFail($this->job_id);
$model->update([
            'down_count' => DB::raw('down_count + 1')
        ]);
3年前 评论
channel (楼主) 3年前
喝卵形 (作者) 3年前
喝卵形 (作者) 3年前
channel (楼主) 3年前
channel (楼主) 3年前
喝卵形 (作者) 3年前
喝卵形 (作者) 3年前
channel (楼主) 3年前

找到问题了,先要有实体模型【实体模型不是说new一个模型就可以了】,参考刚刚上面一位朋友分享的文章仔细看了一下源码,会触及两个属性original 和 attributes 的值进行判断更新操作,也就是说,原实体模型得有值,才能通过更新后的数据判断是否isdirty来判断更新,从而操作模型 ImagedownJob::where('id',$this->job_id)->increment('down_count'); 改为 $model = ImagedownJob::find($this->job_id); $model ->increment();

3年前 评论

前几天就这问题,源码也没看懂。感谢大佬解答~

3年前 评论
Complicated

主要还是看走没有save()方法吧,源码里写的很清楚了,save()会出发那几个数据库事件

3年前 评论

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