Тупик в функциональности блокировки в Laravel - PullRequest
0 голосов
/ 25 мая 2018

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

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

В одном месте

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();
    }

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

...