记 Laravel 模型 deleted 事件未被触发领悟
给模型绑定了观察器,注册了deleted事件,预计以下代码会被触发
User::where('id', 1)->delete();
然而理想是美好的,现实是残酷的,仔细检查了流程, 感觉Perfect,最终几经波折找到如下攻略
总结如下
敲黑板! 检索了模型实例的操作才会被触发
// 这样是不行的
User::where('id', 1)->delete();
// 这样是可行的
$user = User::find(1);
$user->delete();
// 或者
User::destroy(1);
User::destroy([1, 2]);
还是文档啃少了!
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 7年前 自动加精
这个是调用
\Illuminate\Database\Eloquent\Model:delete()
方法,源码里写了会在 delete 前后触发deleting
和deleted
事件,源码是:而
调用的是
Illuminate\Database\Eloquent\Builder::delete()
,然后调用Illuminate\Database\Query\Builder::delete()
,源码里没有加上事件,直接删除数据了,Illuminate\Database\Query\Builder::delete()
源码是:文档仅是源码的介绍,还得看源码怎么写的。。
@lx1036 感觉现在看源码还有点吃力,把使用搞流畅了,下一步就是源码了
@free-andy 是,这些还是靠多找文章看多实践,都是这么过来的。
如果需要通过非主键检索并删除数据,怎么样才能触发删除事件呢?
@messikiller 这种批量删除,可以考虑建立数据表外键
碰到一个类似的情景,正好解惑了,感谢分享~~
= = 也遇到这个问题了,感谢分享。
我也遇到这个问题了 还是文档看的少啊 感谢分享
感谢受用