Предупреждение: недопустимый тип смещения в isset или пусто

У меня есть две сущности Doctrine: страница и 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] Warning: Illegal offset type in isset or empty

Я знаю, что моя страница содержит несколько синонимов, и я знаю, что они содержат дубликаты. Что я здесь делаю не так?

=====

Обновлено: вот моя функция removeSynonym ():

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

        return $this;
}

(Свойство synonyms - это ArrayCollection.)

Пожалуйста, свяжите вашу функцию removeSynonym()

Zahori 18.05.2018 09:41

Спасибо. Сделанный.

Patrick 18.05.2018 09:43
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
1 396
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Другие вопросы по теме