Trait method dispatch has not been applied, because there are collisions with other trait methods on
我总是收到上述错误,现在我想在工作中同时使用 Dispatchable 和 DispatchJobs,我该怎么做?任何帮助或指导将不胜感激。在 Laracasts 上寻找了一些解决方案,但没有一个有效。
Trait method dispatch has not been applied, because there are collisions with other trait methods on
我总是收到上述错误,现在我想在工作中同时使用 Dispatchable 和 DispatchJobs,我该怎么做?任何帮助或指导将不胜感激。在 Laracasts 上寻找了一些解决方案,但没有一个有效。
Jobs 通常不会派发其他 Jobs,因此首先要删除DispatchJobs
trait。你可以做的是监听工作事件。
当 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);
}
});
}
使用全局dispatch()
帮助器,这将有助于在作业中调度另一个作业。所以我们根本不需要添加 DispatchesJobs(这消除了与 Dispatchable 的冲突),您可以只使用帮助dispatch()
程序,它就可以工作
从 Laravel >=5.3
如果您的工作类别是 MyAnotherJob,请尝试调度
MyAnotherJob::dispatch()
每个Job
类都有一个静态dispatch
函数。你可以用那个。
在那边BbtvAdvJob
我再次派遣。
dispatch(new BbtvAdvJob())->delay(3);
确保您php artisan queue:work
在更改作业代码时记得。