Doctrine ODM - 清除/更新/删除EmbedDocument关系

时间:2010-11-11 12:54:21

标签: arrays collections doctrine mongodb reference

我遇到了Doctrine ODM的问题。当我创建一个具有简单EmbedMany关系的实体到另一个文档(即带有许多注释作为嵌入文档的昵称)时,我尝试清除该集合,该集合仍然存在所有元素:

/** @Document */
class Nickpage
{
   ...

   /** @EmbedMany(targetDocument="Comment") */
   protected $comments = array();

   ...

   public function clearComments()
   {
      $this->comments = array();
      // or:
      // $this->comments = new \Doctrine\Common\Collections\ArrayCollection();
      return $this;
   }
}

当我只是加载带有相关评论的昵称时,我会调用

$nickpage->clearComments();
$dm->persist($nickpage);
$dm->flush();

评论仍然存在。当我删除ArrayCollection $ comments中的一些元素并且我刷新...

时,会出现同样的现象

我处理这种关系的方式是错误的(即使用ReferenceMany)还是使用引用的错误方法?

来自德国的格雷茨, 岸堤

1 个答案:

答案 0 :(得分:2)

您不必调用persist,因为您的页面已由Doctrine管理。您只需调用flush即可推送数据库中的更新。

您无需添加clearComments方法。您可以使用ArrayCollection的clear方法:

$nickpage->comments->clear();