У меня есть запрос, в котором я соединяю несколько таблиц с моей исходной сущностью 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);