laravel的关于lockForUpdate的那些事情

时间:2024-10-30 16:32:34
 
 
先来看下数据库的状态:

可以看到,数据库state=0,执行以下代码:

DB::beginTransaction();
$orderInfo = TicketOrder::where('id', 11482)
    // ->where('user_order_id', $userOrderId)
    // ->where('state', 0)
    ->lockForUpdate()
    ->first();
$orderInfo->state=1;
$s = $orderInfo->save();
var_dump($s);
DB::commit();
$orderInfo->state=2;
$s = $orderInfo->save();
var_dump($s);
exit(json_encode($orderInfo));

得到的输出结果是:


可以看到save()函数执行的结果都是true,并且输出的state=2;那么此时查询一下数据库的状态:


可以看到已经更新成state=2了,那么证明commit之后,orm的这行数据还是可以进行更新的,尽管chau查询的时候使用的lockForUpdate(),这证明lockForUpdate只有在事务里面才生效;

此时先把数据库的state改为0,代码也改动一下:



也就是代码中不进行commit操作,那么再执行一下,看看结果:



虽然输出结果是更新成功,并且打印的state=2,但是数据库的状态是没有改变的