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