Laravel 5.6调度队列模型

时间:2018-06-18 09:35:42

标签: laravel queue

我在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)使用了一组严肃的陈述,但这与我认为的问题无关

1 个答案:

答案 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)