Laravel触发关系删除模型事件



我在两个模型上有两个事件。

User型号:

static::deleting(function ($user) {
$user->team()->deletel();
});

Team型号:

static::deleting(function ($team) {
self::transferMembers($team);
});

期望:管理员删除用户时,该用户所属的团队将被删除,该团队中的其他用户应转移到默认团队。

现实:团队已被删除,但没有触发删除事件将成员转移到默认团队。

谢谢你的帮助!

除了"deletel"拼写错误外,这仍然不会调用您的删除事件处理程序:

static::deleting(function ($user) {
$user->team()->delete();
});

问题是$user->team()并没有让它真正加载团队模型,它只是创建了数据库查询的基础,然后在添加->delete()部分时变成了删除查询。因此,只需执行类似"DELETE FROM users WHERE id=__"的数据库查询即可。

为了在调用模型上的任何事件处理程序时使其删除,您必须执行以下操作:

static::deleting(function ($user) {
$user->team->delete();
});

细微的区别在于它是$user->team而不是$user->team()。这使得它将实际模型加载到内存中,然后调用上面的delete方法

理解这两种使用Eloquent关系的方式之间的区别对于正确使用Eloquent非常重要。

最新更新