我想在 Symfony 中使用 Doctrine 对多个模型/表执行一组特定的操作。这是我正在做的:
public function myFunc()
{
$conn = Doctrine_Manager::connection();
try {
$conn->beginTransaction();
$prop_trans->save($conn);
self::doSomething1($conn);
$bill_appor->save($conn);
// Final Committ
$conn->commit();
return $prop_trans;
} catch (Exception $exc) {
if ($conn)
$conn->rollback();
throw $exc;
}
}
public function doSomething($conn)
{
$obj = new Trans();
// this function might create & save another child record
$obj->doSomething2($conn);
$obj->save($conn);
}
但是,当出现异常(代码或数据库级别)时,我想知道回滚是否有效,因为我看到一些记录被保存了。
我的理解是,只要我打开了一个连接,开始了一个事务,所有使用连接 $conn 的方法都在同一个事务中运行。如果某处失败,则全部回滚。
我也尝试过使用保存点,但无法使用它们。有人可以告诉我传递连接是否足以让一切都运行交易吗? 是因为设置了 MySQL auto_committ 属性还是什么? 谢谢
最佳答案
好吧,只有 InnoDB 表才支持事务,我相信您的某些表是 MyISAM。因此,回滚仅适用于 InnoDB,您会看到对 MyISAM 的更改保持不变。
关于mysql - Symfony/Doctrine : Transaction involving multiple objects/functions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5864687/