update 不能触发触发观察器?
1.老项目维护需要对数据表中字段A进行操作,每次这张表发生了更新操作,就要对A进行重新计算,但是项目比较大,多数更新都是用model::where()->update([]);来进行更新。想使用观察者public function updated来进行监听,但是发现不触发。想问问有什么其他方法来达到想要这种效果?
$list = Model::where()->get(); foreach($list as $m){ $m->fill($data)->save(); } 试试这样子的写法,你可以试试
@arukas 换成save确实会触发,但是项目涉及到的地方太多了几乎全部都是用的update来进行修改
解决办法就是楼上的
@di-gua 应该也只有这种方法了,只能在每个update后面去添加。
如果是更新一条可以
User::where($where)->first()->update($fill)
,多条只能$users = User::get()
可以少写一个
save()
:joy:直接用异步事件来实现吧,效果一样的。
有包来完善监控这个的,我之前也遇到过这个问题
@609468798 能否说一下是哪个包呢?
@xiangyang composer require shineyork/laravel-extend-database 可能有bug 自己测试下
下面这样的不会触发模型事件,比如:
会不能触发 updated 是因为
model::where ()->update ([]) 等同 DB::where()->update([])
where 返回的是
Illuminate\Database\Eloquent\Builder
所以 update() 是 Builder 的 update(), 而不是 model 里的 update()
自然就不会触发到 updated 事件
个人作法也是跟几位楼上的相似