tp5.1 事务操作疑问 ?

末子
  • 61

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

如:
$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 又使用模型,就代表不是同一个链接对象吗 ?

回复
阅读 1.1k
2 个回答
一个人
  • 4
新手上路,请多包涵

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

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

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

宣传栏