laravel的关于lockForUpdate的那些事情

 
 
先来看下数据库的状态:

可以看到,数据库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,但是数据库的状态是没有改变的


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

micro_cloud_fly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值