我怎么能在Laravel派遣另一份工作

时间:2018-02-17 06:21:04

标签: laravel traits jobs laravel-queue laravel-jobs

Trait method dispatch has not been applied, because there are collisions with other trait methods on 

我总是遇到上述错误,现在我想在工作中同时使用Dispatchable和DispatchJobs,我怎么能这样做?任何帮助或指导将受到高度赞赏。在Laracasts上寻找的解决方案很少,但都没有。

4 个答案:

答案 0 :(得分:1)

使用全局dispatch()帮助程序,这将有助于在作业中分派另一个作业。因此,我们根本不需要添加DispatchesJobs(这可以消除与Dispatchable的冲突),您只需使用帮助器dispatch()即可使用

答案 1 :(得分:0)

乔布斯通常不会派遣其他职位,所以首先要删除DispatchJobs特征。你能做的就是听job events

当作业完成时,它会触发after事件。听取此事件,然后dispatch()听众中的下一个作业:

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Queue::after(function (JobProcessed $event) {
        // determine the job type from $event->job
        // then dispatch the next job based on your logic

        // check the job type
        if ($event->job instanceof MyJob) {
            // get the job payload to pass to next job
            $data = $event->job->payload

            dispatch(new NextJob($data));
            // or use the static method
            NextJob::dispatch($data);
        }
    });
}

答案 2 :(得分:0)

如果您的工作类别是MyAnotherJob,请尝试调度

MyAnotherJob::dispatch()

每个Job类都有一个静态dispatch函数。 您可以使用它。

答案 3 :(得分:0)

这对我有用

BbtvAdvJob旁边我再次派遣。

 dispatch(new BbtvAdvJob())->delay(3);

确保在更改作业代码时调用 php artisan queue:work