Czytałem dokumentację Doctrine, ale nie byłem w stanie znaleźć sposobu sortowania wyników findAll ().
Używam doktryny symfony2 +, oto stwierdzenie, którego używam w moim kontrolerze:
$this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll();
ale chcę, aby wyniki były uporządkowane według rosnących nazw użytkowników.
Próbowałem przekazać tablicę jako argument w ten sposób:
findAll( array('username' => 'ASC') );
ale to nie działa (też nie narzeka).
Czy można to zrobić bez tworzenia zapytania DQL?
źródło
źródło
Prosty:
źródło
Czasami warto spojrzeć na kod źródłowy.
Na przykład
findAll
implementacja jest bardzo prosta (vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php
):Więc patrzymy
findBy
i znajdujemy to, czego potrzebujemy (orderBy
)źródło
To działa dla mnie:
Pozostawienie pierwszej tablicy pustej powoduje odzyskanie wszystkich danych, w moim przypadku zadziałało.
źródło
Spójrz na kod źródłowy Doctrine API:
źródło
Musisz użyć kryteriów, na przykład:
źródło
findBy w Symfony oprócz dwóch parametrów. Pierwsza to tablica pól, które chcesz przeszukać, a druga to pole sortowania i jego kolejność
źródło
Możesz posortować istniejącą kolekcję ArrayCollection za pomocą iteratora tablicy.
zakładając, że $ collection jest Twoim ArrayCollection zwróconym przez findAll ()
Można to łatwo przekształcić w funkcję, którą można umieścić w repozytorium w celu utworzenia metody findAllOrderBy ().
źródło
Spróbuj tego:
źródło
Używam alternatywy dla rozwiązania, które napisał nifr.
Jest szybszy niż klauzula ORDER BY i bez narzutu Iteratora.
źródło
Zmodyfikuj domyślną funkcję findAll w EntityRepository w następujący sposób:
W ten sposób możesz użyć funkcji „findAll” w każdym zapytaniu dla dowolnej tabeli danych z opcją sortowania zapytania
źródło