Laravel 队列事件未序列化模型
Laravel queue event not serializing models
不确定我是否做错了什么,但是当尝试广播事件时,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 并在广播功能上获取它,只是问我是否做错了什么或者这实际上是一个错误。
对于运行宁队列你必须运行php artisan queue:work
为此还要确保驱动程序是 database
您可以将其设置为您的 .env
文件。
希望对您有所帮助
我认为问题出在您的 public $queue
属性.
The documentation 说明您可以通过定义 $broadcastQueue
属性 来指定事件队列。但是,它没有提到如果未定义 $broadcastQueue
,它还会检查 $queue
属性。
由于您定义了 $queue
属性,它将尝试将您的事件推送到由 QueueJob
模型实例的 __toString()
值命名的队列中,我假设它不存在以及为什么你的工作永远不会发送到队列。
如果您将 属性 重命名为 $queueJob
之类的名称,那么我相信它应该适合您。
不确定我是否做错了什么,但是当尝试广播事件时,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 并在广播功能上获取它,只是问我是否做错了什么或者这实际上是一个错误。
对于运行宁队列你必须运行php artisan queue:work
为此还要确保驱动程序是 database
您可以将其设置为您的 .env
文件。
希望对您有所帮助
我认为问题出在您的 public $queue
属性.
The documentation 说明您可以通过定义 $broadcastQueue
属性 来指定事件队列。但是,它没有提到如果未定义 $broadcastQueue
,它还会检查 $queue
属性。
由于您定义了 $queue
属性,它将尝试将您的事件推送到由 QueueJob
模型实例的 __toString()
值命名的队列中,我假设它不存在以及为什么你的工作永远不会发送到队列。
如果您将 属性 重命名为 $queueJob
之类的名称,那么我相信它应该适合您。