php实现主从分离的好处,laravel的坑(事务,主从分离等)

本文探讨了在Laravel中使用多数据库事务、主从分离事务以及increment/decrement方法时可能遇到的问题。在多数据库事务中,必须指定连接以启用事务。在主从分离事务中,所有操作都在主库上执行。increment和decrement在特定情况下可能返回不期望的结果,由于时间戳自动更新导致。
摘要由CSDN通过智能技术生成

其实也不算坑,只是在官方文档中未提及或开发过程中本人未注意到的点

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了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值