我在两个模型上有两个事件。
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非常重要。