Laravel队列事件不是序列化模型

时间:2018-02-19 10:37:07

标签: php laravel laravel-echo

不确定我是否做错了,但是当尝试广播一个事件时,SerializesModels仅序列化我投掷的第一个模型。

class WorkerQueueEvent implements ShouldBroadcast
{
  use Dispatchable, InteractsWithSockets, SerializesModels;

  protected $user;
  public $queue;
  public function __construct(User $user,QueueJob $queue)
  {
    $this->user = $user;
    $this->queue = $queue;
  }
  public function broadcastOn()
  {    
    return new PrivateChannel('Queues/' . $this->user->id);
  }
}

这导致队列永远不会被处理。 如果我在构造函数中执行dd($queue);dd($user);,它会记录它们,但它永远不会到达broadcastOn();

我确实让它工作,传递QueueJob id并在广播函数上获取它,只是询问我是否做错了或者这实际上是错误。

2 个答案:

答案 0 :(得分:1)

我认为这里的问题是您的public $queue财产。

The documentation表示您可以通过定义$broadcastQueue属性来指定事件队列。但是,它没有提及如果未定义$queue,它还会检查$broadcastQueue属性。

由于您已定义了$queue属性,因此它会尝试将您的事件推送到您__toString()模型实例的QueueJob值所指定的队列中,我{m}假设不存在以及为什么你的工作永远不会被发送到队列。

如果您将属性重命名为$queueJob,那么我相信它应该适合您。

答案 1 :(得分:0)

要运行队列,您必须运行php artisan queue:work

为此还要确保驱动程序为database,您可以将其设置为.env文件。

希望这有帮助