symfony2中的beginTransaction

时间:2014-12-13 22:27:29

标签: symfony doctrine-orm

我正在学习,我对Doctrine和Symfony有更多怀疑

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

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()之间有什么不同?何时使用其中一个

1 个答案:

答案 0 :(得分:2)

对于您在那里所做的事情,您不需要使用beginTransaction()commit(),因为flush()基本上会照顾它。

persist()用于将新实体插入数据库,flush()实际执行数据库操作。如果您已经获取了实体并进行了修改,那么您不需要persist(),因为Doctrine已经在管理它。

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

当您致电$this->getDoctrine()时,它会返回Doctrine Registry服务(相当于$this->container->get('doctrine');),该服务引用您所有的Doctrine连接和实体管理器。

进一步的文件:

http://doctrine-orm.readthedocs.org/en/latest/reference/transactions-and-concurrency.html http://symfony.com/doc/current/book/doctrine.html

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