Очереди Laravel и FirstOrNew

Я использую очередь Laravel для получения данных из API, когда меня уведомляют об изменениях через Webhooks. Webhook возвращает только id измененного объекта, поэтому мне нужно сделать запрос к API, чтобы получить остальные.

Я отправляю задание на получение объекта по идентификатору, оно работает в фоновом режиме (драйвер Redis, супервизор). В очереди я использую:

Model::firstOrNew(['remote_id' => $id]);

но на ->save() я получаю:

SQLSTATE[23000]: нарушение ограничения целостности: 1062 Дублирующаяся запись «tag-12» для ключа «categories_type_remote_id_unique» (SQL: вставить в categories...

Если я отлаживаю этот код с помощью драйвера sync, я не могу воспроизвести эту ошибку, она появляется только в фоновых заданиях. Например, задание не может получить самые последние данные из БД и использует new часть firstOrNew вместо first.


person lasoweq    schedule 23.12.2018    source источник


Ответы (1)


проблема в mysql. вы вводите повторяющуюся запись «тег-12», найдите, какие ключи вы определили как уникальные. затем измените свой метод firstOrNew

person Mehdi Meshkatian    schedule 23.12.2018
comment
findOrNew ничего не создает в БД, это происходит на save(), а findOrNew должен найти существующую запись в БД, но не - person lasoweq; 23.12.2018