У меня есть работа Laravel, которую я отправляю для чтения данных о клиентах из файла. Задание имеет зависимость модели регистратора, и этот регистратор отслеживает определенную статистику, а затем записывает в таблицу базы данных журнала по завершении задания. Когда я немедленно отправляю это задание, оно работает нормально, но если я ставлю в очередь точно такое же задание с точно такими же параметрами, а затем запускаю его из очереди, происходит сбой с ошибкой:
[Illuminate\Database\Eloquent\ModelNotFoundException]
No query results for model [app\Models\MyModel].
Я думаю, что это происходит из-за природы сериализации / несериализации, присущей системе очередей Laravel, которая ломает Eloquent, который пробует метод findOrFail (), когда я на самом деле никогда не пытаюсь найти что-то в БД. Я просто создаю новый журнал из пустой модели. Как бы то ни было, ясно, что одна и та же работа Laravel, если она не находится в очереди, работает нормально — но она терпит неудачу, когда в очереди. Я в недоумении и думаю, есть ли способ обойти эту проблему.
Благодарю.
Я обошел его, создав экземпляр и сохранив объект модели, прежде чем передать его в конструктор задания, так что он по крайней мере имеет первичный ключ. Это исключает метод findOrFail (). Немного хакерский, но это лучшее, что я мог придумать.
Сделайте обработчик ошибок (поместите его в ваши маршруты)
App::error(function(Illuminate\Database\Eloquent\ModelNotFoundException $e)
{
return Response::make('Not found',404);
});