Php Laravel无法从crontab分派作业

Php Laravel无法从crontab分派作业,php,laravel,laravel-5,queue,jobs,Php,Laravel,Laravel 5,Queue,Jobs,如果我在控制器中使用此代码,队列将运行良好 $job=(new ReProcessShipment($single_data->request_data))->delay(2); $this->dispatch($job); 但在crontab中使用相同的代码会引发错误 方法App\Console\Commands\AddPreProcess::dispatch不存在。{“异常”:“[object](BadMethodCallException(代码:0): 方法App\

如果我在控制器中使用此代码,队列将运行良好

 $job=(new ReProcessShipment($single_data->request_data))->delay(2);
 $this->dispatch($job);
但在crontab中使用相同的代码会引发错误

方法App\Console\Commands\AddPreProcess::dispatch不存在。{“异常”:“[object](BadMethodCallException(代码:0):
方法App\Console\Commands\AddPreProcess::dispatch不存在

试着像这样使用它

 $job=(new ReProcessShipment($single_data->request_data))->delay(2);
 ReProcessShipment::dispatch($job);
然后得到错误

类App\Jobs\reprocessapping的对象无法转换为字符串{“exception”:“[Object](ErrorException(代码:0):类App\Jobs\reprocessapping的对象无法在转换为字符串

我无法从cronjob处理作业队列任何建议都很好。

您可以通过调用作业类上的static
dispatch
方法并将作业的构造函数参数传递给
dispatch
方法来创建作业,如下所示:

ReProcessShipment::dispatch($single_data->request_data)->delay(2);
确保您正在使用
illumb\Foundation\Bus\Dispatchable
特性,以便能够调用作业类上的
dispatch
,例如:

use Illuminate\Foundation\Bus\Dispatchable;

class ProcessPodcast implements ShouldQueue
{
    use Dispatchable, ...
如果查看,您将看到静态
分派
功能使用作业的参数为您创建作业,因此在分派作业之前不需要创建作业。这是
分派
功能的来源:

public static function dispatch()
{
    return new PendingDispatch(new static(...func_get_args()));
}
所以它本质上改变了这一点:

ReProcessShipment::dispatch($single_data->request_data);
为此:

new PendingDispatch(new ReProcessShipment($single_data->request_data));

在第二个示例中,您将
$job
传递给
dispatch
方法。在上面的示例中,我将作业的参数传递给
dispatch
方法。您正在执行
分派($job);
,我建议
分派($single_data->request_data)