symfony Doctrine -- PersistentCollection / ArrayCollection -- как работать

Проблема

При работе со связанными сущностями в Symfony, методы getSmth() возвращают PersistentCollection, а не ArrayCollection, несмотря на то, что в конструкторе явно указано создание объекта ArrayCollection.

Решение

Работать с объектом PersistentCollection можно с помощью тех же методов, которые и он, и объект ArrayCollection наследуют у интерфейса Collection: add(), contains(), removeElement(), getValues(), set(), toArray() и другие.

$presistentCollectionObject->getValues();

Достать объекты, хранящиеся в свойстве можно используя foreach:

foreach ($presistentCollectionObject as $obj) {
    dump($obj);
}

Обратите внимание, что если распечатать PresistentCollection напрямую, то находящаяся внутри ArrayCollection будет пустой.

К сожалению, причина создания объекта другого класса пока не ясна.

Пример

Можно рассмотреть на примере создания связи Many To Many, Self-referencing. Создание "друзей" пользователя.