代码之家  ›  专栏  ›  技术社区  ›  Leon N

Laravel 5.6调度队列模型

  •  0
  • Leon N  · 技术社区  · 6 年前

    我做了一份工作 JobController 在Laravel 5.6中,作业应接收雄辩模型的实例,但它不接收!

    作业控制器部件:

    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));
    

    作业确实在我的jobs表中排队,但读取序列化数据时,我看不到对相关模型的任何引用!

    这是我工作本身的一部分:

    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 回复  |  直到 6 年前
        1
  •  0
  •   Tarek Adam    6 年前

    将$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);
    }
    }
    

    另外,您也可以考虑PSR4命名。(大写)