如何访问Doctrine replace()方法?

时间:2013-09-12 19:33:40

标签: symfony doctrine-orm

我正在使用Symfony2 + Doctrine进行我的第一个项目,目前正在尝试实施replacing records。但是当我试着打电话时

    $em->save($product); 

    $em->replace($product);

(而不是)

    $em->persist($product);

我得到了致命的错误。所以我开始挖掘尝试找到persist()方法,以便我可以看到其他方法可用。我搜索了vendor / doctrine目录的全部内容,但找不到对persist或flush方法的任何引用。这些位于何处?我试着按照代码但很快迷路了。

所以主要问题:如何在Symfony2中用doctrine做一个replace()?

子问题:persist()和flush()方法在哪里?无法找到它们本身就令人沮丧。

2 个答案:

答案 0 :(得分:3)

如果其他人想知道,请尝试查看:

$em = $service->get('doctrine.orm.entity_manager');
$entity = $em->merge($entity);
$em->flush();

来自docsDoctrine\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

中找到它们