mysql - Symfony/Doctrine : Transaction involving multiple objects/functions

标签 mysql transactions symfony1 doctrine rollback

我想在 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/

相关文章:

php - 在 mysqli 中带参数执行

mysql - 续接交易 : ER_LOCK_WAIT_TIMEOUT

hibernate - Seam POJO 的手动事务

mysql - 返回一个列值的结果,但不返回另一个 SQL

mysql - 如何删除mysql中的外键?

mysql - 我可以在 MySQL 触发器中使用类似事务的功能吗

php - mysql在数据库中两次插入记录

PHP session 损坏

post - symfony 1.4 如何获取POST参数?

php - 在数据库中保存和编辑数组的最佳方法是什么(json、序列化或文本)