【问题标题】:Warning: Illegal offset type in isset or empty警告:isset 中的非法偏移类型或为空
【发布时间】:2018-05-18 07:37:09
【问题描述】:

我有两个 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;
}

(同义词属性是一个 ArrayCollection。)

【问题讨论】:

  • 请链接你的removeSynonym()函数
  • 谢谢。完成。

标签: php symfony doctrine


【解决方案1】:

如果synonyms 是你应该使用的 ArrayCollection

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多