我正在学习,我对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()
之间有什么不同?何时使用其中一个
答案 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文档提供了很好的示例和解释。