关系删除上的Laravel触发模型事件

时间:2018-10-31 18:31:22

标签: php laravel model eloquent event-handling

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

User模型:

static::deleting(function ($user) {

    $user->team()->deletel();
});

Team模型:

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

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

>

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

谢谢您的帮助!

1 个答案:

答案 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的两种方式之间的区别是非常重要的。