情景:订单下单,需要使用事务和模型,同时方便查数据使用db()方法
流程 先插入repait_order表,然后获取orderid,再组合数据,插入repair_question、repair_project表
情况1:先db后Db:startTrans() 在模型方法
情况2:先Db:startTrans() 后Db::table 或Db::name 再模型
情况3 先Db:startTrans() 后db() 再模型
实践发现,只有情况3可以正常的把所有数据全部插入对应表,其他情况下repair_question、repair_project表正常插入正确数据,repair_order没插入数据。
原因推测,根据网上说法,tp事务应用的事务嵌套规则,且模型操作都会应用事务
这样存在一个嵌套的情况,mysql原生不支持嵌套,当Db:startTrans()后再Db:startTrans(),会默认提交第一次的Db:startTrans(),从而导致很多莫名其妙的问题。