2

I have a document with a field marked for persistence as a Collection

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

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

}

By default, when Doctrine maps the values from Mongo it will set $things to be an instance of Doctrine\Common\Collections\ArrayCollection.

This violates my domain model however as my domain objects expect the $things property to be an instance of my own collection class ThingsCollection. This class does various validations on the list of things.

How can I tell Doctrine to use my ThingsCollection class instead? I imagine I will have to make the ThingsCollection class implement the Doctrine\Common\Collections\Collection interface but that is not a problem if I can just figure out how to tell Doctrine about the mapping in the first place.

BenMorel
  • 34,448
  • 50
  • 182
  • 322
D-Rock
  • 2,636
  • 1
  • 21
  • 26

1 Answers1

0

The answer is that it is not possible.

Furthermore, despite the documentation being confusing and saying otherwise, for a general Collection property mapping as above (not a reference) an ArrayCollection is not returned. A basic php array is given.

So, it appears in this situation, you are forced to work with arrays, at least currently.

D-Rock
  • 2,636
  • 1
  • 21
  • 26