Laravel возможное состояние гонки?

У меня есть приложение Laravel 5.2 и приложение Angular 1. Они общаются с помощью REST API. Существует фрагмент кода, который обновляет некоторые данные базы данных при каждой загрузке страницы (приложение представляет собой браузерную игру, поэтому в этом случае ресурсы и юниты игрока обновляются / производятся), но я столкнулся с некоторыми проблемами.

Существуют ситуации, когда веб-интерфейс запрашивает несколько конечных точек API одновременно. Если новый блок был произведен с момента последнего запроса, Entity должно быть attached() к Player модель (отношение «многие ко многим»). На самом деле все 3 запроса пытаются присоединить новый Entity и в конечном итоге с SQL error: duplicate key (не точная формулировка) на pivot Таблица.

Проблема не изолирована от Eloquent, например, 3 запроса API одновременно приводят к созданию 3 отчетов и т. Д.

Как лучше всего решить эту проблему? До сих пор я пытался обернуть операторы БД DB::transaction но это, похоже, не решило проблему (или я сделал это неправильно).

Спасибо за любой полезный ответ.

0

Решение

В соответствии с L5.2 исходный код attach кажется, чтобы вставить запись в сводную таблицу каждый раз, когда вы запускаете ее.

Одним из решений может быть замена attach с syncWithoutDetaching([entity_id]),

Тем не менее, было бы еще лучше ограничить количество запросов до одного в вашем угловом приложении.

0

Другие решения

В конце концов я создал Команду Laravel, которая всегда работает в фоновом режиме:

while(true) {
updateUnitsExample();
$this->info('Units updated for time '. date("H:m:s"));
sleep(1);
}
0

По вопросам рекламы [email protected]