Saya telah membaca dokumentasi Doctrine, tetapi saya belum dapat menemukan cara untuk mengurutkan Hasil findAll ().
Saya menggunakan doktrin symfony2 +, ini adalah pernyataan yang saya gunakan di dalam Controller saya:
$this->getDoctrine()->getRepository('MyBundle:MyTable')->findAll();
tapi saya ingin hasil diurutkan dengan menaik nama pengguna.
Saya telah mencoba untuk melewatkan sebuah array sebagai argumen dengan cara ini:
findAll( array('username' => 'ASC') );
tetapi tidak berhasil (juga tidak mengeluh).
Apakah ada cara untuk melakukan ini tanpa membuat kueri DQL?
sumber
sumber
Sederhana:
sumber
Terkadang berguna untuk melihat kode sumber.
Misalnya
findAll
implementasinya sangat sederhana (vendor/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php
):Jadi kami melihat
findBy
dan menemukan apa yang kami butuhkan (orderBy
)sumber
Ini bekerja untuk saya:
Menjaga array pertama kosong mengambil kembali semua data, itu berhasil dalam kasus saya.
sumber
Lihat kode sumber API Doktrin:
sumber
Anda perlu menggunakan kriteria, misalnya:
sumber
Metode findBy di Symfony mengecualikan dua parameter. Pertama adalah array bidang yang ingin Anda cari dan array kedua adalah bidang sortir dan urutannya
sumber
Anda dapat mengurutkan ArrayCollection yang ada menggunakan iterator array.
dengan asumsi $ collection adalah ArrayCollection Anda yang dikembalikan oleh findAll ()
Ini dapat dengan mudah diubah menjadi fungsi yang dapat Anda masukkan ke dalam repositori Anda untuk membuat metode findAllOrderBy ().
sumber
Coba ini:
sumber
Saya menggunakan alternatif solusi yang menulis nifr.
Ini lebih cepat daripada klausa ORDER BY , dan tanpa overhead Iterator.
sumber
Ubah fungsi findAll default di EntityRepository seperti ini:
Dengan begitu Anda dapat menggunakan '' findAll '' pada kueri apa pun untuk tabel data apa pun dengan opsi untuk mengurutkan kueri tersebut
sumber