Заставить отношения «извлекать присоединенные», чтобы включить IDENTITY их отношений ManyToOne, используя HYDRATE_ARRAY? - PullRequest
0 голосов
/ 13 января 2019

У меня есть запрос, в котором я соединяю несколько таблиц с моей исходной сущностью Person. Person может иметь несколько Child отношений (OneToMany), а Child может иметь School, к которым они переходят (ManyToOne). Проблема в том, что мне не нужна вся сущность School, которая подключается к каждому дочернему элементу, только их id, которые уже хранятся в Child.

Я использую Paginator для итерации по результатам, и я использую HYDRATE_ARRAY, чтобы уменьшить накладные расходы на анализ данных ORM для объектов сущностей. Но поля id несвязанных отношений не возвращаются таким образом, и поэтому Школа id также не возвращается.

Я тоже могу присоединиться к сущности School, но поскольку удостоверение уже хранится в записях Child, я не понимаю, почему мне следует еще больше снижать производительность, добавляя базу данных в другую таблицу. Выборка результатов в виде объектов сущности также решит проблему, но также за счет производительности. Как я могу заставить id приложить результаты без необходимости без необходимости присоединяться к сущности School или необходимости гидрировать результаты как объекты?

$query = $em->getRepository(Entity\Person::class)->createQueryBuilder('p');

$query
  ->select([
    'p as person',
    'w.name as workplace_name',
    'c',
  ])
  ->leftJoin('p.children', 'c') //Entity\Child
  ->leftJoin('p.workplace', 'w') //Entity\Company
  //...

;
$paginator = new Paginator($query);
$paginator->getQuery()
  ->setHydrationMode(\Doctrine\ORM\Query::HYDRATE_ARRAY);

1 Ответ

0 голосов
/ 15 января 2019

Вы можете использовать Doctrine \ ORM \ Query :: HINT_INCLUDE_META_COLUMNS , чтобы включить значения столбца внешнего ключа в результат:

$paginator->getQuery()
->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true)
->setHydrationMode(\Doctrine\ORM\Query::HYDRATE_ARRAY);

, который:

Подсказка запроса includeMetaColumns заставляет мета-столбцы, такие как внешние ключи и столбцы дискриминатора, выбираться и возвращаться как часть результата запроса.

Ссылки

...