Ich versuche eine Abfrage zum Abrufen von Objekten aus einer Doctrine-Datenbank zu erstellen, sortiert nach der Anzahl der Mitglieder einer bestimmten Eins-zu-viele-Beziehung.Wie sortiere ich eine Doctrine DQL-Abfrage nach der Anzahl oder den Mitgliedern einer Relation?
Genauer gesagt: Ich habe zwei Entitäten: Person und Föderation. Eine Person kann Mitglied einer Föderation sein (Person hat eine "Föderation" -Beziehung), und eine Föderation kann n Personen haben (Föderation als "Personen" -Beziehung).
Ich möchte eine DQL-Abfrage erstellen, die die Liste der Föderationen zurückgeben würde, geordnet nach Anzahl der Mitglieder dieser Föderation. Etwas in diese Richtung:
SELECT f FROM AcmeStatsBundle:Federation f ORDER BY [number of members of f.people]
Das wäre der erste Schritt. Es gibt einen zusätzlichen zweiten Schritt, von dem ich nicht weiß, ob es möglich ist, mit einer einzelnen Abfrage zu erreichen, die die Mitglieder der Beziehung vor dem Zählen filtern würde. Wie so:
SELECT f FROM AcmeStatsBundle:Federation f ORDER BY [number of (f.people p where p.attr = value)]
Das zweite wäre das optimale Ergebnis, aber die erste erfüllt meine Bedürfnisse, wenn der zweite Fall nicht in einer einzigen Abfrage feasibly.
Vielen Dank im Voraus.
Danke für die Antwort:
Referenz SELECT Dokumentation dql! Ich musste geringfügige Änderungen an der Abfrage vornehmen, da ich denke, dass man ORDER BY nicht durch ein Aggregat sortieren kann, ohne es auszuwählen. Die letzte Abfrage lautet also: 'SELECT f, COUNT (p) als qtd FROM AcmeStatsBundle: Federation f LEFT JOIN f.people p WHERE p.attr =: some_value GROUP BY f.id ORDER BY qtr' : D –