我在2个模型上有2个事件。
User
模型:
static::deleting(function ($user) {
$user->team()->deletel();
});
Team
模型:
static::deleting(function ($team) {
self::transferMembers($team);
});
期望: :当管理员删除用户时,该用户所属的团队将被删除,并且该团队中的其他用户应转移到默认团队中。
>现实: 该团队已删除,但没有触发删除事件将成员转移到默认团队。
谢谢您的帮助!
答案 0 :(得分:1)
除了“ deletel”拼写错误之外,这仍然不会调用您的删除事件处理程序:
static::deleting(function ($user) {
$user->team()->delete();
});
问题是$user->team()
并未真正加载团队模型,它只是创建数据库查询的基础,然后您在添加->delete()
部分时变成了删除查询。这样的话,数据库查询就像“从ID为__的用户处删除用户”一样。
要在调用模型上的任何事件处理程序时将其删除,您必须执行以下操作:
static::deleting(function ($user) {
$user->team->delete();
});
微妙的区别是它是$user->team
而不是$user->team()
。这样就可以将实际模型加载到内存中,然后在其上调用delete方法。
了解正确使用Eloquent的两种方式之间的区别是非常重要的。