首页 > 解决方案 > 删除模型时如何触发 Laravel (5.6) 事件?

问题描述

当从系统中删除用户时,我试图触发一个事件,但我认为它删除我的用户太快了,所以我的事件不起作用。我要做的是在删除用户时进行广播。

这是控制器:

public function destroy($id)
{
    $user = new User();

    $user = $user->find($id);

    broadcast(new UserWasDeleted($user, Auth::user()))->toOthers();

    $user->delete();

    return response([
                        'status'  => 'success',
                        'message' => 'The user was successfully deleted.'
                    ], 200);
}

如果我删除 $user->delete(); 这将成功广播 线,当它在那里时不广播。

我什至尝试为事件设置监听器,并在监听器中删除用户。它删除了用户,但仍然没有广播。

标签: laravel

解决方案


需要从处理已删除模型的事件中删除 SerializesModels 特征。

SerializesModels 是一个 trait,它只在事件(或作业)被序列化时存储模型的 id,并在事件被反序列化时从数据库中重新获取模型。

这允许排队的进程在运行时从数据库中获取新模型,因此它们不会使用过时的信息运行,但是当您从数据库中删除该行时,这将不可靠。


推荐阅读