如何在删除 Laravel 一对多关联模型时触发子模型事件?

请尝试在评论区里写下答案(如不能清楚表述,那么你可能没真正理解)。欢迎参与,为下一次求职做准备。

一对多关系,Post 拥有多个 Comment。

Comment 模型拥有监控类 CommentObserver:

// CommentObserver.php
public function deleted(Comment $comment)
{
    // 重新计算评论作者的 『发布评论数』
    $comment->user->recalculateCommentCount();
}

是否可以直接使用以下方法,来触发 CommentObserver 里的事件监控?

// PostObserver.php
public function deleted(Post $post)
{
    $post->comments()->delete();
}
摈弃世俗浮躁,追求技术精湛
Summer
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

这个属于批量删除,不会触发观察者滴

//todo 只有模型被填充才会触发
$post->comments->each->delete();
2年前 评论

需要在服务提供者 boot()方法里注册事件。

Post::observer(PostObserver::class);
2年前 评论

这个属于批量删除,不会触发观察者滴

//todo 只有模型被填充才会触发
$post->comments->each->delete();
2年前 评论

注意:通过 Eloquent 进行批量更新时,被更新模型的 saved 和 updated, deleting 和 deleted 事件不会被触发。这是因为批量更新时,并没有真的获取模型。

2年前 评论

楼上说 批量操作的, 这里对于 $post 并不是批量删除, 模型事件是 Post 的 deleted 事件, 跟批量没有关系.

2年前 评论
beatles (作者) 2年前
Summer (楼主) 2年前

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