警告:isset中的偏移量类型非法或为空

Pat*_*ick 1 php doctrine symfony

我有两个教义实体:Page和同义词。每个页面包含几个同义词的引用,并且我想确保没有重复的同义词名称。因此,我创建了一个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();
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。但是,当我运行命令时,我发现该$page->removeSynonym($synonym);行抛出此ContextErrorException:

[Symfony \ Component \ Debug \ Exception \ ContextErrorException]警告:isset中的偏移量类型非法或为空

我知道我的页面包含多个同义词,并且我知道它们包含重复项。我在这里做错了什么?

=====

编辑:这是我的removeSynonym()函数:

public function removeSynonym(Synonym $synonym)
{
        $this->synonyms->remove($synonym);

        return $this;
}
Run Code Online (Sandbox Code Playgroud)

(同义词属性是ArrayCollection。)

Jac*_*ron 5

如果synonyms是ArrayCollection,则应使用

$this->synonyms->removeElement($synonym);
Run Code Online (Sandbox Code Playgroud)

以您的方式,$this->synonyms->remove($synonym);它希望删除元素的键/索引,而不是元素本身。