Laravel 5.1作业如果立即生效,但由于Eloquent模型错误而排队失败

时间:2015-09-28 04:09:28

标签: php laravel queue jobs

我有一个Laravel作业,我发送该作业以从文件中读取客户数据。作业具有记录器模型依赖性,此记录器跟踪某些统计信息,然后在作业完成时写入日志数据库表。当我立即调度此作业时,它工作正常,但如果我使用完全相同的参数对完全相同的作业进行排队,然后从队列中运行它就会失败并显示错误:

[Illuminate\Database\Eloquent\ModelNotFoundException]               
  No query results for model [app\Models\MyModel].

我认为这是由于Laravel队列系统中固有的序列化/反序列化特性打破了Eloquent,当我从未真正尝试在db中查找某些内容时,它尝试使用findOrFail()方法。我只是从空白模型创建一个新日志。无论如何,很明显,相同的Laravel作业在没有排队的情况下运行良好 - 但排队时失败了。我很茫然,想知道是否有办法解决这个问题。

感谢。

2 个答案:

答案 0 :(得分:2)

我通过实例化然后保存模型对象然后将其传递给作业的构造函数来解决它,因此它至少有一个主键集。这消除了findOrFail()方法。有点hacky,但它是我能想到的最好的。

答案 1 :(得分:-2)

制作错误处理程序(将其放入路线中)

App::error(function(Illuminate\Database\Eloquent\ModelNotFoundException $e)
{
    return Response::make('Not found',404);
});