我在Laravel 5.6中创建了一个Job JobController
该作业应该收到一个雄辩模型的实例,但事实并非如此!
Jobcontroller部分:
try {
$merk = merk_vertalen::find(1);
} catch (ModelNotFoundException $e) {
return back()->withErrors('Merk niet gevonden in de administratie');
}
rdw_retrieve_merk::dispatch($merk)
->OnQueue('rdw_data')
->delay(now()->addSeconds(5));
作业确实在我的作业表中排队,但是读取序列化数据我看不到任何对相关模型的引用!
这是我工作本身的一部分:
class rdw_retrieve_merk implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $tries = 5;
/**
* Create a new job instance.
*/
public function __construct()
{
}
/**
* Execute the job.
*/
public function handle(merk_vertalen $merk)
{
dd($merk);
}
}
作业表中的信息内容:
{"displayName":"App\\Jobs\\rdw_retrieve_merk","job":"Illuminate\\Queue\\CallQueuedHandler@call","maxTries":5,"timeout":null,"timeoutAt":null,"data":{"commandName":"App\\Jobs\\rdw_retrieve_merk","command":"O:26:\"App\\Jobs\\rdw_retrieve_merk\":8:{s:5:\"tries\";i:5;s:6:\"\u0000*\u0000job\";N;s:10:\"connection\";N;s:5:\"queue\";s:8:\"rdw_data\";s:15:\"chainConnection\";N;s:10:\"chainQueue\";N;s:5:\"delay\";O:25:\"Illuminate\\Support\\Carbon\":3:{s:4:\"date\";s:26:\"2018-06-18 11:20:37.736566\";s:13:\"timezone_type\";i:3;s:8:\"timezone\";s:16:\"Europe\/Amsterdam\";}s:7:\"chained\";a:0:{}}"}}
转储结果是模型的空实例。
作业rdw_retrieve_merk应该在其他地方检索信息,但是要根据传递给作业的数据,通过模型。而不是真实版本中的dd($ merk)使用了一组严肃的陈述,但这与我认为的问题无关
答案 0 :(得分:0)
将$ merk移动到构造函数。
class rdw_retrieve_merk implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $tries = 5;
private $merk;
/**
* Create a new job instance.
*/
public function __construct($merk)
{
$this->merk = $merk;
}
/**
* Execute the job.
*/
public function handle()
{
dd($this->merk);
}
}
另外,您可以考虑使用psr 4命名。 (CapCase)