我有两个Doctrine实体:Page和Synonym。每个页面都包含几个同义词,我想确保没有重复的同义词名称。所以我创建了一个symfony命令,它运行页面上的同义词,检查重复项:
protected function dedupeSynonyms(Page $page, EntityManager $em)
{
$synonyms = $page->getSynonyms();
$names = [];
foreach ($synonyms as $synonym) {
if (in_array($synonym->getName(), $names)) {
$page->removeSynonym($synonym);
} else {
$names[] = $synonym->getName();
}
$em->persist($synonym);
}
$em->flush();
}
到目前为止,这么好。但是当我运行我的命令时,我发现$page->removeSynonym($synonym);
行抛出了这个ContextErrorException:
[Symfony \ Component \ Debug \ Exception \ ContextErrorException]警告: isset中的非法偏移类型或空
我知道我的页面包含几个同义词,我知道它们包含重复项。我在这里做错了什么?
=====
编辑:这是我的removeSynonym()函数:
public function removeSynonym(Synonym $synonym)
{
$this->synonyms->remove($synonym);
return $this;
}
(peers属性是一个ArrayCollection。)
答案 0 :(得分:5)
如果synonyms
是一个ArrayCollection,你应该使用
$this->synonyms->removeElement($synonym);
以$this->synonyms->remove($synonym);
的方式,它希望删除元素的键/索引,而不是元素本身。