postLoad не работает, если данные выбираются с помощью построителя запросов - PullRequest
0 голосов
/ 07 декабря 2018

Я создал прослушиватель событий

class ProcessPostLoadListener
{
    public function postLoad(LifecycleEventArgs $args)
    {
        $em = $args->getEntityManager();
        $entity = $args->getEntity();
        if ($entity instanceof Process) {
              .
              .
              .
        }

    }
}

Когда я выбираю данные с помощью getRepository (Process :: class) -> find ($ id), вызывается метод postLoad, и я могу изменять данные.

Но когда данные выбираются с помощью построителя запросов,

$qb = $this->createQueryBuilder('p')
    ->select('PARTIAL p.{id,answersInRelatedQuestionnaires}')
    ->where('p.id = :processId')
    ->setParameter('processId', $processId);

postLoad не вызывается.Что я могу сделать?Есть еще одно событие для прослушивания?

Спасибо

1 Ответ

0 голосов
/ 08 декабря 2018

Цитирование из Doctrine документация :

Событие PostLoad происходит для объекта после загрузки объекта в текущий EntityManager из базы данных или после применения операции обновления

Это означает, что событие PostLoad отправляется только при гидратации объекта-сущности, и это верно только в том случае, если для режима гидратации установлено значение HYDRATE_OBJECT.Поскольку вы используете HYDRATION_ARRAY, возвращается ассоциативный массив, а объектный объект не гидратируется, поэтому событие PostLoad не происходит.

...