tp5.1 事务操作疑问 ?

在进行一个事务操作的时候,多表结构回滚,是全部回滚还是只回滚主表 ?

如:
$modelA->startTrans();
try {

$modelA->save($datas…);
$modelB->save($datas…);
$modelC->save($datas…);
// cache error
$modelD->save($datas…);
……
$modelA->commit();

} catch(Error $e) {

$modelA->rollback();

}

执行到 $modelC 的时候发生错误,ABD 都会回滚么 ?

作者有句话:
事务操作一定要谨记一条,必须是相同的数据库连接对象

这个相同的数据库链接对象怎么理解 ?
Db::name('tableA')->todo
Db::name('tableB')->todo
他们是相同的链接对象吗 ?

$modelA $modelB … 他们是同一个链接对象吗 ?

如果在 try 语句中,即使用 DB 又使用模型,就代表不是同一个链接对象吗 ?

阅读 2.4k
2 个回答

我理解的 Db类获得的链接是单例链接 所以是同一个链接

Db::name('tableA')->todo  
Db::name('tableB')->todo

这种除非连接的不是同一个数据库,正常应该是同一个链接
然后你上面说的是否会回滚,在 C 之前肯定会回滚,在C 之后的都没执行不会回滚也没东西可以回滚

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题