我遇到了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)还是使用引用的错误方法?
来自德国的格雷茨, 岸堤
答案 0 :(得分:2)
您不必调用persist,因为您的页面已由Doctrine管理。您只需调用flush即可推送数据库中的更新。
您无需添加clearComments方法。您可以使用ArrayCollection的clear方法:
$nickpage->comments->clear();