Доктрина: Fetch EAGER и Hydrate Array

С Doctrine у ​​меня есть fetch=EAGER в моей сущности:

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;

Почему, когда я делаю «массив гидратов», он не работает?

Экран моего дампа для того же объекта (второй - «массив Hydrate»):

введите здесь описание изображения


person Gaylord.P    schedule 31.10.2017    source источник
comment
Вам помог мой ответ? Если это так, пожалуйста, примите мой ответ. Если нет, пожалуйста, дайте мне знать.   -  person Stephan Vierkant    schedule 14.11.2017


Ответы (1)


В режиме гидратации Query::HYDRATE_ARRAY Doctrine будет возвращать информацию только об этой «строке». Поскольку ваш атрибут versions является не полем, а коллекцией, он не будет возвращен.

Если вы хотите включить Коллекции, используйте вместо них Объекты (как на первом снимке экрана).

Если вам действительно нужна сериализация ваших объектов (возвращение многомерного массива вместо объектов), используйте сериализатор. Поскольку вы используете Symfony, вы можете легко использовать компонент Symfony Serializer. Популярной альтернативой является JMSSerializerBundle.

person Stephan Vierkant    schedule 08.11.2017