Search code examples
symfonydoctrine-ormsymfony-3.3

Doctrine : Fetch "EAGER" and "Hydrate Array"


With Doctrine, I have fetch=EAGER in my entity :

class TrainingOrganization
{
    /**
     * @var TrainingOrganizationVersion[]|ArrayCollection
     *
     * @ORM\OneToMany(
     *     targetEntity="AppBundle\Entity\TrainingOrganizationVersion",
     *     mappedBy="trainingOrganization",
     *     cascade={"persist"},
     *     fetch="EAGER"
     * )
     * @ORM\OrderBy({"id" = "ASC"})
     * @Assert\Valid()
     * @Versionable
     */
    private $versions;

Why when i do "hydrate array" it does not work ?

Screen of my dump for same entity (Second is "Hydrate array") :

enter image description here


Solution

  • With Hydration mode Query::HYDRATE_ARRAY, Doctrine will only return information about that 'row'. Since your versions attribute is not a field but a collection, it won't be returned.

    If you want to have Collections included, use Objects instead (like your first screenshot).

    If you really need your entities serialized (returning a multidimensional array instead of objects), use a serializer. Since you're using Symfony, you can easily use Symfony's Serializer Component. The JMSSerializerBundle is a popular alternative.