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