Laravel Eloquent: Memesan hasil semua ()

214

Saya terjebak pada tugas sederhana. Saya hanya perlu memesan hasil yang datang dari panggilan ini

$results = Project::all();

Di mana Projectseorang model. Saya sudah mencoba ini

$results = Project::all()->orderBy("name");

Tapi itu tidak berhasil. Mana cara yang lebih baik untuk mendapatkan semua data dari sebuah tabel dan membuatnya dipesan?

MatterGoal
sumber

Jawaban:

384

Anda sebenarnya dapat melakukan ini dalam kueri.

$results = Project::orderBy('name')->get();

Ini akan mengembalikan semua hasil dengan urutan yang tepat.

Travis B
sumber
Inilah dokumen- dokumennya
Ryan
Dan penjelasan untuk get()vs all(): stackoverflow.com/questions/34587457/…
patricus
114

Anda masih bisa menggunakan sortBy (di tingkat koleksi) alih-alih orderBy (di tingkat permintaan) jika Anda masih ingin menggunakan semua () karena mengembalikan koleksi objek.

Urutan Naik

$results = Project::all()->sortBy("name");

Urutan Turun

$results = Project::all()->sortByDesc("name");

Lihat dokumentasi tentang Koleksi untuk lebih jelasnya.

https://laravel.com/docs/5.1/collections

Yannick Y
sumber
Persis apa yang saya cari. Apakah penggunaan ekstensif ini akan memiliki kelemahan dibandingkan dengan menggunakan orderBypada tingkat permintaan?
Giedrius
1
\ @foreach ($ posts-> sortByDesc ('Created_at') sebagai $ post) \ @include ('posts.post') \ @endforeach
sdexp
2
Saya tertarik mengetahui bagaimana ini bekerja di belakang layar. Saya merasa seolah-olah menyortir koleksi dengan yang sortBy()terjadi di dalam Laravel Engine (dalam PHP), sementara orderBy()itu dilakukan dalam database. Tentunya basis data akan lebih cepat di hampir semua situasi yang mungkin, dan dengan bertambahnya set data Anda, perbedaan kinerja juga akan semakin besar. Saya ingin mendengar pendapat orang lain tentang ini.
cartbeforehorse
3
@cartbeforehorse Anda perlu tahu metode mana mengembalikan apa. :: all () mungkin hanya memanggil -> get () di bawah tenda, yang, pada gilirannya, mengembalikan koleksi. sortBy () adalah metode koleksi, jadi ya itu terjadi di sisi PHP (sebagai lawan dari orderBy () yang dipanggil pada objek permintaan). Merupakan ide yang buruk untuk menggunakan :: all () sama sekali, apalagi mengurutkannya dalam PHP. Bayangkan jika :: all () mengembalikan koleksi dengan jutaan objek. Akan terlalu lama untuk mengambilnya dan bahkan lebih banyak waktu untuk mengurutkannya dalam PHP. Tentu saja, Anda dapat menggunakan :: all () jika Anda tahu pasti itu akan mengembalikan hanya beberapa objek (dalam koleksi).
Avram
mengapa yang ini bukan jawaban yang diterima? ini bekerja dengan semua fungsi ().
VishalParkash
36

Selain itu, hanya untuk menopang jawaban sebelumnya, bisa juga disortir dalam urutan menurun descatau naik ascdengan menambahkan parameter kedua.

$results = Project::orderBy('created_at', 'desc')->get();
ken4ward
sumber
14

Pembaruan 2017


Laravel 5.4 menambahkan metode orderByDesc () ke pembuat kueri:

$results = Project::orderByDesc('name')->get();
Sebastien Horin
sumber
10

Meskipun Anda perlu hasil untuk tanggal sebagai desc

$results = Project::latest('created_at')->get();
DsRaj
sumber
9

MELAKUKAN HAL INI:

$results = Project::orderBy('name')->get();

JANGAN LAKUKAN INI:

$results = Project::all()->sortBy('name');

MENGAPA? Secara singkat, pendekatan pertama lebih cepat dari pendekatan kedua.

doncadavona
sumber
3
Akan lebih baik untuk menambahkan penjelasan mengapa: Pendekatan pertama membuat urutan pada tingkat basis data (permintaan) yang hampir selalu jauh lebih efisien - kinerja terbaik. Saya akan mengatakan menggunakan pendekatan Model selalu, ketika Anda akan membutuhkan pendekatan kedua, Anda akan tahu :)
jave.web
4

Catatan, Anda bisa melakukan:

$results = Project::select('name')->orderBy('name')->get();

Ini menghasilkan permintaan seperti:

"SELECT name FROM proyect ORDER BY 'name' ASC"

Di beberapa aplikasi ketika DB tidak dioptimalkan dan kueri lebih kompleks, dan Anda perlu mencegah menghasilkan ORDER OLEH di SQL selesai, Anda dapat melakukan:

$result = Project::select('name')->get();
$result = $result->sortBy('name');
$result = $result->values()->all();

Sekarang adalah php yang memesan hasilnya.

hkcoyant
sumber
0

Instruksi Anda memerlukan panggilan untuk mendapatkan, karena itu membawa catatan dan memesan oleh katalog

$results = Project::orderBy('name')
           ->get();

Contoh:

$results = Result::where ('id', '>=', '20')
->orderBy('id', 'desc')
->get();

Dalam contoh data disaring oleh "di mana" dan membawa catatan lebih besar dari 20 dan memesan dengan pesanan dari tinggi ke rendah.

Vhngroup Tecnologia
sumber