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

时间:2018-05-18 07:37:10

标签: php symfony doctrine

我有两个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。)

1 个答案:

答案 0 :(得分:5)

如果synonyms是一个ArrayCollection,你应该使用

$this->synonyms->removeElement($synonym);

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