我想使用Doctrine和Symfony对多个模型/表执行一组操作。这就是我正在做的事情:
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属性还是什么? 感谢
答案 0 :(得分:2)
嗯,只有InnoDB表支持交易,我相信你的一些表是MyISAM。因此,回滚仅适用于InnoDB,并且您看到MyISAM的更改保持不变。
答案 1 :(得分:1)
试试
catch (Exception $exc) {
$conn->rollback();
}
在你的try catch 或 只需将try catch放在你的其他功能上