Предупреждение: недопустимый тип смещения в isset или пустой - PullRequest
0 голосов
/ 18 мая 2018

У меня есть две сущности Доктрины: Пейдж и Синоним.Каждая страница содержит ссылки на несколько синонимов, и я хочу убедиться, что имена синонимов не дублируются.Поэтому я создаю команду 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;
}

(Свойство synonyms является ArrayCollection.)

1 Ответ

0 голосов
/ 18 мая 2018

Если synonyms является ArrayCollection, вы должны использовать

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

На вашем пути $this->synonyms->remove($synonym); он ожидает, что удаляется ключ / индекс элемента, а не сам элемент.

...