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

我总是收到上述错误,现在我想在工作中同时使用 Dispatchable 和 DispatchJobs,我该怎么做?任何帮助或指导将不胜感激。在 Laracasts 上寻找了一些解决方案,但没有一个有效。

4

4 回答 4

3

Jobs 通常不会派发其他 Jobs,因此首先要删除DispatchJobstrait。你可以做的是监听工作事件

当 Job 完成时,它会触发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);
        }
    });
}
于 2018-02-17T06:28:59.870 回答
1

使用全局dispatch()帮助器,这将有助于在作业中调度另一个作业。所以我们根本不需要添加 DispatchesJobs(这消除了与 Dispatchable 的冲突),您可以只使用帮助dispatch()程序,它就可以工作

于 2018-02-17T07:29:44.313 回答
0

从 Laravel >=5.3

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

MyAnotherJob::dispatch()

每个Job类都有一个静态dispatch函数。你可以用那个。

于 2019-06-28T10:47:01.200 回答
0

这对我有用

在那边BbtvAdvJob我再次派遣。

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

确保您php artisan queue:work在更改作业代码时记得。

于 2021-06-30T07:52:19.417 回答