Когда я исполняю что-то вроде этого в Учении:назначить несколько различных Сущности в одном массиве строки в Доктрине
$qb = $doctrine
->getRepository('EntityA')
->createQueryBuilder('a')
->addSelect('b')
->join('EntityB', 'b', 'WITH', 'a.b = b')
->getQuery()
->getResult()
Я получаю массив, который выглядит следующим образом:
array(0 => EntityA,
1 => EntityB,
2 => EntityA,
4 => EntityB)
На самом деле, я получаю 2 строки результата, но массив, размер которого равен 4. Это делает итерацию над ним для отображения в шаблонах практически невозможным.
Я хотел бы результат, как этот:
array(0 => array(EntityA, EntityB),
1 => array(EntityA, EntityB))
Конечно, я мог бы создать отображение на EntityA
, ссылающийся EntityB
. Но даже с возможностью изменения поведения загрузки, LAZY
, EAGER
и т. Д., Может быть желательно иметь возможность создавать такие отношения «на лету».
Например:
В обзорах с большим количеством лиц, EAGER
нагрузка необходима, чтобы предотвратить чрезмерное количество запросов. Но когда я хочу отображать только одну Entity и не нуждаюсь в дополнительных данных, LAZY-загрузка более желательна.
Так что я все еще на карте 'EntityB' на' A', скажем через Annotation, лениво. Присоединившись вручную, я подражаю нетерпению? Doctrine распознает извлеченные данные и устанавливает их в соответствующее поле на 'EntityA'? Это было бы аккуратно ... – Joshua
@ Joshua на самом деле после изучения немного больше темы я обнаружил, что я был неправ. Согласно официальной документации: «Присоединение (будь то внутреннее или внешнее соединение) становится« присоединяемым соединением », как только поля объединенного объекта появляются в части SELECT запроса DQL вне агрегированной функции. В противном случае это «регулярное соединение» .' – Mark
@ Joshua. Я буду исследовать тему немного больше сегодня и предлагаю другое решение. – Mark