donglinxia1541 2018-05-25 07:14 采纳率: 0%
浏览 372

Laravel中锁定功能的死锁

I am developing a bidding application in laravel. In this, I have to run cronjob after each minute and user can also bid from front end. So to avoid collision I am using lockForUpdate() of laravel. I have placed this in two different functions where bid ids are being processed. And In one place I am using it three times and at other its is being used one time. I have placed my code inside DB::transaction. But due to some reason I am getting deadlock error whenever same raw is processed by two users at same time.

I am using this as given below:

At One Place

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

At Other Place

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

Can anyone give me some idea about how to overcome this error?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
    • ¥20 Java-Oj-桌布的计算
    • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
    • ¥20 有人知道这种图怎么画吗?
    • ¥15 pyqt6如何引用qrc文件加载里面的的资源
    • ¥15 安卓JNI项目使用lua上的问题
    • ¥20 RL+GNN解决人员排班问题时梯度消失
    • ¥60 要数控稳压电源测试数据
    • ¥15 能帮我写下这个编程吗
    • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路