Я выбираю 3 объекта через регулярную LEFT JOIN в DQL. Они связаны через таблицы соединений, которые также имеют сущности, определенные для них, а также аннотированные отношения. Запрос выполняется без проблем, но мои результаты возвращаются как плоский массив. Я ожидал бы массив с тремя субъектами в качестве элементов массива для каждого индекса:Doctrine DQL, возвращающий плоский массив из соединения
SELECT e1, e2, e3 FROM AppBundle:EntityOne
JOIN AppBundle:JoinEntityOneWithTwo e1_2 WITH e1_2.entity1 = e1.id
JOIN AppBundle:EntityTwo e2 WITH e1_2.entity2 = e2.id
JOIN AppBundle:JoinEntityOneWithThree e1_3 WITH e1_3.entity1 = e1.id
JOIN AppBundle:EntityThree e3 WITH e3.id = e1_3.entity3
WHERE e1.some_field IN ('some','values','in','e1');
Когда я называю getResult()
по запросу, либо увлажняющим как объект или массив, я получить набор плоских результаты:
array(
/AppBundle/Entity/EntityOne (...),
/AppBundle/Entity/EntityTwo (...),
/AppBundle/Entity/EntityThree (...),
/AppBundle/Entity/EntityOne (...),
/AppBundle/Entity/EntityTwo (...),
/AppBundle/Entity/EntityThree (...),
/AppBundle/Entity/EntityTwo (...),
/AppBundle/Entity/EntityThree (...),
/AppBundle/Entity/EntityOne (...),
)
Я бы ожидать, или хотел бы иметь многомерный массив:
Array(
[0] => Array(
[0] /AppBundle/Entity/EntityOne,
[1] /AppBundle/Entity/EntityTwo,
[2] /AppBundle/Entity/EntityThree
),
[1] => . . .
)
результаты не связаны построчно. Они также не могут быть в любом предсказуемом порядке, я могу сгруппировать их с помощью array_chunk()
Сгенерированный sql отлично работает. DQL возвращает точные результаты - они просто не сформулированы так, как я ожидал. Я следую доктринам (неуловимая) документация по нетерпеливой загрузке присоединяется:
Этого вопрос очень похож на
Doctrine DQL returns multiple types of entities
Но мой выбор для того, отличаются, как мои присоединиться таблицы многочастичные слишком много. Большое спасибо!
Вариант этого был задан вопрос:
Getting Doctrine DQL results the SQL way
Я очень удивлен, что доктрина не поддерживает жадную загрузку через таблицу соединения.
Для использования жадной загрузки вы должны выбрать e1 только и не e1, e2 и e3. – Alsatian
Да, e1 не имеет ссылки на внешний ключ на любой таблице. Я мог бы получить часть пути, выбрав «e1_2», но затем я потеряю связь с «e3». – eggmatters