Symfony / Doctrine:涉及多个对象/功能的事务

时间:2011-05-03 03:20:06

标签: mysql transactions symfony1 doctrine rollback

我想使用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属性还是什么? 感谢

2 个答案:

答案 0 :(得分:2)

嗯,只有InnoDB表支持交易,我相信你的一些表是MyISAM。因此,回滚仅适用于InnoDB,并且您看到MyISAM的更改保持不变。

答案 1 :(得分:1)

试试

catch (Exception $exc) {

                $conn->rollback();

        }

在你的try catch 或 只需将try catch放在你的其他功能上

相关问题