У меня есть две сущности 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.)
Спасибо. Сделанный.






Если synonyms является ArrayCollection, вы должны использовать
$this->synonyms->removeElement($synonym);
По-вашему, $this->synonyms->remove($synonym); ожидает, что будет удален ключ / индекс элемента, а не сам элемент.
Пожалуйста, свяжите вашу функцию
removeSynonym()