laravel的关于lockForUpdate

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,代码也改动一下:

DB::beginTransaction();
$orderInfo = TicketOrder::where('id', 11482)
    ->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));

也就是代码中不进行commit操作,那么再执行一下,看看结果:
虽然输出结果是更新成功,并且打印的state=2,但是数据库的状态是没有改变的

HTTPROOT | 自学PHP | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 石头哥 |微信小程序 |木讯
Copyright © 1998 - 2016 HTTPROOT.COM. All Rights Reserved httproot.com 版权所有