Ich habe die Dokumentation von Doctrine gelesen, aber ich konnte keine Möglichkeit finden, findAll () -Ergebnisse zu sortieren.
Ich verwende die Symfony2 + -Doktrin. Dies ist die Aussage, die ich in meinem Controller verwende:
$this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll();
Ich möchte jedoch, dass die Ergebnisse nach aufsteigenden Benutzernamen sortiert werden.
Ich habe versucht, ein Array folgendermaßen als Argument zu übergeben:
findAll( array('username' => 'ASC') );
aber es funktioniert nicht (es beschwert sich auch nicht).
Gibt es eine Möglichkeit, dies zu tun, ohne eine DQL-Abfrage zu erstellen?
quelle
quelle
Einfach:
quelle
Manchmal ist es nützlich, sich den Quellcode anzusehen.
Zum Beispiel ist die
findAll
Implementierung sehr einfach (vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php
):Also schauen wir uns an
findBy
und finden, was wir brauchen (orderBy
)quelle
Das funktioniert bei mir:
Wenn das erste Array leer bleibt, werden alle Daten abgerufen, in meinem Fall hat es funktioniert.
quelle
Schauen Sie sich den Doctrine API-Quellcode an:
quelle
Sie müssen ein Kriterium verwenden, zum Beispiel:
quelle
Die findBy-Methode in Symfony akzeptiert zwei Parameter. Das erste ist ein Array von Feldern, nach denen Sie suchen möchten, und das zweite Array ist das Sortierfeld und seine Reihenfolge
quelle
Sie können eine vorhandene ArrayCollection mithilfe eines Array-Iterators sortieren.
Angenommen, $ collection ist Ihre ArrayCollection, die von findAll () zurückgegeben wird.
Dies kann leicht in eine Funktion umgewandelt werden, die Sie in Ihr Repository einfügen können, um die Methode findAllOrderBy () zu erstellen.
quelle
Versuche dies:
quelle
Ich benutze eine Alternative zu der Lösung, die nifr geschrieben hat.
Es ist schneller als die ORDER BY- Klausel und ohne den Overhead des Iterators.
quelle
Ändern Sie die Standardfunktion findAll in EntityRepository wie folgt:
Auf diese Weise können Sie '' findAll '' für jede Abfrage für eine beliebige Datentabelle verwenden und die Abfrage sortieren
quelle