Тупик в функциональности блокировки в Laravel

Я разрабатываю приложение для торгов в laravel. В этом я должен бежать cronjob После каждой минуты пользователь также может делать ставки с внешнего интерфейса. Поэтому, чтобы избежать столкновения, я использую lockForUpdate() Ларавелла. Я поместил это в две разные функции, где обрабатываются идентификаторы ставок. И в одном месте я использую его три раза, а в другом — один раз. Я поместил свой код внутри DB::transaction, Но по какой-то причине я получаю ошибку взаимоблокировки, когда один и тот же raw обрабатывается двумя пользователями одновременно.

Я использую это, как указано ниже:

В одном месте

DB::beginTransaction();
try
{
-----Some Code ----

SecondGameBids::where('id', $big)->lockForUpdate()->get();
SecondGameBids::where('id', $big)->update(['final_value' =>0, 'deal_status' => 1]);

-----Some Code ------

SecondGameBids::where('id', $small)->lockForUpdate()->get();
SecondGameBids::where('id', $small)->update(['final_value' =>0, 'deal_status' => 1]);

------Some Code ------

DB::commit();
}
catch (\Exception $e) {

DB::rollback();
}

В другом месте

 DB::beginTransaction();
try
{
-----Some Code ----

SecondGameBids::where('id', $big)->lockForUpdate()->get();
SecondGameBids::where('id', $big)->update(['status' => 3]);

------Some Code ------
DB::commit();
}
catch (\Exception $e) {

DB::rollback();
}

Кто-нибудь может дать мне некоторое представление о том, как преодолеть эту ошибку?

1

Решение

Задача ещё не решена.

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector