Ich wähle 3 Entitäten über regulären LINKEN JOIN in DQL aus. Sie sind über Join-Tabellen verknüpft, für die auch Entitäten definiert sind, sowie mit Anmerkungen versehene Beziehungen. Die Abfrage wird ohne Fehler ausgeführt, aber meine Ergebnisse werden als flaches Array zurückgegeben. Ich würde für jeden Index einen Array mit den drei Einheiten als Array-Elemente erwarten:Doctrine DQL gibt ein flaches Array von Join zurück
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');
Wenn ich getResult()
auf der Abfrage aufrufe, entweder feuchtigkeitsspendend als ein Objekt oder ein Array, erhalte ich ein flachen Ergebnisse einstellen:
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 (...),
)
ich würde erwarten, oder wie eine mehrdimensionale Array haben:
Array(
[0] => Array(
[0] /AppBundle/Entity/EntityOne,
[1] /AppBundle/Entity/EntityTwo,
[2] /AppBundle/Entity/EntityThree
),
[1] => . . .
)
Die Ergebnisse sind nicht von Zeile verwendet. Noch sind sie in einer vorhersagbaren Reihenfolge, dass ich sie mit gruppieren kann mit array_chunk()
Die generierte SQL läuft gut. Die DQL liefert genaue Ergebnisse - sie sind einfach nicht so formuliert, wie ich es erwarten würde. Ich verfolge Doctrines (schwer) Dokumentation über eager loading verbindet:
Diese Frage ist sehr ähnlich zu
Doctrine DQL returns multiple types of entities
Aber meine wählen Auftrag ist anders als meine Join-Tabellen sind viel zu viele. Vielen Dank!
Eine Variante dieser Frage gestellt wurde:
Getting Doctrine DQL results the SQL way
Ich bin ziemlich überrascht, dass Lehre über Join-Tabelle nicht eifrig Laden nicht unterstützt.
eifrig Laden nutzen zu können, wählen Sie müssen e1 nur und nicht e1, e2 und e3. – Alsatian
yeah, e1 hat keinen Fremdschlüsselbezug auf irgendeinem Tisch. Ich könnte einen Teil des Weges bekommen, indem ich 'e1_2' wähle, aber dann verliere ich die Beziehung zu' e3'. – eggmatters