我正在使用Symfony2 + Doctrine进行我的第一个项目,目前正在尝试实施replacing records。但是当我试着打电话时
$em->save($product);
或
$em->replace($product);
(而不是)
$em->persist($product);
我得到了致命的错误。所以我开始挖掘尝试找到persist()方法,以便我可以看到其他方法可用。我搜索了vendor / doctrine目录的全部内容,但找不到对persist或flush方法的任何引用。这些位于何处?我试着按照代码但很快迷路了。
所以主要问题:如何在Symfony2中用doctrine做一个replace()?
子问题:persist()和flush()方法在哪里?无法找到它们本身就令人沮丧。
答案 0 :(得分:3)
如果其他人想知道,请尝试查看:
$em = $service->get('doctrine.orm.entity_manager');
$entity = $em->merge($entity);
$em->flush();
来自docs,Doctrine\ORM\EntityManager::merge()
:
将分离实体的状态合并到持久化上下文中 此EntityManager并返回实体的托管副本。该 传递给合并的实体不会与此关联/管理 EntityManager的。
应该为你做的伎俩。
答案 1 :(得分:0)
我不认为Symfony支持Doctrine的replace()
方法,或者至少它不能通过EntityManager访问。
如果您需要更新现有实体,那么您可以按照此处的说明进行操作 - http://symfony.com/doc/current/book/doctrine.html#updating-an-object。
至于persist()
和flush()
方法 - 您可以在vendor/doctrine/common/lib/Doctrine/Common/Persistence/ObjectManager.php