美文网首页
laravel的坑(事务,主从分离等)

laravel的坑(事务,主从分离等)

作者: 路边小草_e606 | 来源:发表于2017-08-03 11:02 被阅读0次

其实也不算坑,只是在官方文档中未提及或开发过程中本人未注意到的点
1.多数据库使用事务的坑(model指定了$connection,用的是/config/database.php里的连接)
使用DB::beginTransaction()是没有效果的,相当于未使用事务,必须指定连接,事务才能生效
DB::connection('连接名')->beginTransaction();
DB::connection('连接名')->rollback();
DB::connection('连接名')->commit();

2.主从分离中事务的坑
在事务开始直到结束这一过程中,所有的查询更新删除操作都作用在主库,所以不必担心在事务中的查询会查询到从库,也没必要在事务中为了查询主库而使用onWriteConnection;
未使用事务的地方,想要读主库的数据,可以使用onWriteConnection: Table::onWriteConnection()->find($id);

3.increment与decrement的坑
$rs1 = Order::find(41)->decrement('shipping_fee', 0);
echo '$rs1 = '.$rs1.' ';
$rs2 = Order::find(41)->decrement('order_amount', 0);
echo '$rs2 = '.$rs2.' ';
运行结果:$rs1 = 1 $rs2 = 0
原因分析:查看这两行代码执行的真实sql语句:
update orders set shipping_fee = shipping_fee - 0, updated_at = '2017-08-03 10:10:25' where id = '41'
update orders set order_amount = order_amount - 0, updated_at = '2017-08-03 10:10:25' where id = '41'
结论:因为使用了laravel时间自动更新的功能,而且更新的是同一条数据,updated_at为最新时间,第一条语句执行返回条数1,而第二条的updated_at跟第一条一样,返回的更新条数就为0了。

相关文章

网友评论

      本文标题:laravel的坑(事务,主从分离等)

      本文链接:https://www.haomeiwen.com/subject/skaulxtx.html