Symfony 在symfomy2中开始交易

Symfony 在symfomy2中开始交易,symfony,doctrine-orm,Symfony,Doctrine Orm,我在学习,我对教义和符号有更多的怀疑 坚持的最佳实践是什么? 现在我用这个: try { $em = $this->getEm(); $em->beginTransaction(); $product = new \Acme\StoreBundle\Entity\Product(); $product->setName('foo'); $product->setPrice('19.99');

我在学习,我对教义和符号有更多的怀疑

坚持的最佳实践是什么? 现在我用这个:

try {
        $em = $this->getEm();
        $em->beginTransaction();
        $product = new \Acme\StoreBundle\Entity\Product();
        $product->setName('foo');
        $product->setPrice('19.99');
        $em->persist($product);
        $em->flush();
        $em->commit();
    } catch (\Exception $e) {
        $em->rollback();
        throw $e;
    }
但在symfony文档中,没有beginTransaction。
$em=$this->getDoctrine()->getManager()之间有什么不同
$em=$this->getDoctrine()
?当使用一个或另一个时,您不需要使用
beginTransaction()
commit()
,因为
flush()
基本上会解决这个问题

persist()
用于将新实体插入数据库,而
flush()
实际执行数据库操作。如果已经获取实体并对其进行修改,则不需要
persist()
,因为条令已经在管理它

您将使用
$em=$this->getDoctrine()->getManager()当您在Symfony控制器中获取实体管理器时

当您调用
$this->getDoctrine()
时,它返回条令注册表服务(相当于
$this->container->get('Doctrine');
),该服务引用您的所有条令连接和实体管理器

进一步文件:


最好的学习方法是阅读文档和实验。Symfony文档提供了极好的示例和解释。

thnaks,有点清楚。当我必须使用beginTransaction时?在条令链接中,它在我的例子中使用。对,条令链接有这个功能,因为我把你链接到了交易部分。这实际上取决于您的用例。最简单的理由是,如果您正在执行多个数据库操作,并且如果其中一个操作失败,您希望所有其他操作也失败,而不是回滚。或者,如果您认为查询很有可能导致异常,您希望捕获并处理它。