Как указать класс для типов отображения Doctrine ODM Collection

У меня есть документ с полем, отмеченным для сохранения как Коллекция

 use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;  

/** @ODM\Document */
class Item
{
    /**
    * @ODM\Collection
    */
    protected $things;

}

По умолчанию, когда Doctrine сопоставляет значения из Mongo, $things устанавливается как экземпляр Doctrine\Common\Collections\ArrayCollection.

Однако это нарушает мою модель предметной области, поскольку мои объекты предметной области ожидают, что свойство $things будет экземпляром моего собственного класса коллекции ThingsCollection. Этот класс выполняет различные проверки списка вещей.

Как я могу указать Doctrine использовать вместо этого мой класс ThingsCollection? Я предполагаю, что мне придется заставить класс ThingsCollection реализовать интерфейс Doctrine\Common\Collections\Collection, но это не проблема, если я могу просто выяснить, как сообщить Doctrine о сопоставлении в первую очередь.


person D-Rock    schedule 28.08.2012    source источник


Ответы (1)


Ответ заключается в том, что это невозможно.

Кроме того, несмотря на то, что документация сбивает с толку и говорит об обратном, для общего сопоставления свойства Collection, как указано выше (не ссылка), ArrayCollection не возвращается. Дается базовый массив php.

Итак, оказывается, в этой ситуации вы вынуждены работать с массивами, по крайней мере, сейчас.

person D-Rock    schedule 29.08.2012