不确定我是否做错了,但是当尝试广播一个事件时,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并在广播函数上获取它,只是询问我是否做错了或者这实际上是错误。
答案 0 :(得分:1)
我认为这里的问题是您的public $queue
财产。
The documentation表示您可以通过定义$broadcastQueue
属性来指定事件队列。但是,它没有提及如果未定义$queue
,它还会检查$broadcastQueue
属性。
由于您已定义了$queue
属性,因此它会尝试将您的事件推送到您__toString()
模型实例的QueueJob
值所指定的队列中,我{m}假设不存在以及为什么你的工作永远不会被发送到队列。
如果您将属性重命名为$queueJob
,那么我相信它应该适合您。
答案 1 :(得分:0)
要运行队列,您必须运行php artisan queue:work
为此还要确保驱动程序为database
,您可以将其设置为.env
文件。
希望这有帮助