Laravel Eloquent: Tümünün sipariş sonuçlarını ()


214

Basit bir göreve takıldım. Sadece bu çağrıdan gelen sonuçları sipariş etmem gerekiyor

$results = Project::all();

ProjectBir model nerede . Bunu denedim

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

Ama işe yaramadı. Bir tablodan tüm verileri almanın ve sipariş etmenin en iyi yolu hangisidir?

Yanıtlar:



114

Nesnelerin bir koleksiyonunu döndürdüğü için all () işlevini kullanmaya devam etmek istiyorsanız orderBy (sorgu düzeyinde) yerine sortBy (koleksiyon düzeyinde) kullanabilirsiniz.

Artan Düzen

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

Azalan sipariş

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

Daha fazla bilgi için Koleksiyonlar hakkındaki belgelere bakın.

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


Tam aradığım şey. orderBySorgu düzeyinde kullanımla karşılaştırıldığında, bunun yoğun kullanımının herhangi bir olumsuz yanı var mı?
Giedrius

1
\ @foreach ($ posts-> sortByDesc ('created_at') $ post olarak) \ @include ('posts.post') \ @endforeach
sdexp

2
Bunun perde arkasında nasıl çalıştığını bilmekle ilgileniyorum. sortBy()Veritabanında yapılırken koleksiyon sıralama Laravel Engine (PHP) içinde olur gibi bana çarpıcı orderBy(). Şüphesiz, veritabanı neredeyse tüm olası durumlarda daha hızlı olacaktır ve veri kümeniz arttıkça performanstaki eşitsizlik de artacaktır. Diğer insanların bu konudaki düşüncelerini duymak isterim.
cartbeforehorse

3
@cartbeforehorse Hangi yöntemin neyi döndürdüğünü bilmeniz gerekir. :: all () muhtemelen sadece kaputun altında -> get () çağırır, bu da bir koleksiyon döndürür. sortBy () bir toplama yöntemidir, bu yüzden evet PHP tarafında olur (bir sorgu nesnesinde çağrılan orderBy () yerine). PHP'de sıralamak yerine :: all () kullanmak kötü bir fikirdir. :: all () öğesinin bir milyon nesne içeren bir koleksiyon döndürdüğünü düşünün. Onu getirmek çok uzun sürecek ve PHP'de sıralamak için daha fazla zaman alacak. Tabii ki, sadece bir avuç nesne (bir koleksiyonda) döndüreceğinden eminseniz :: all () kullanabilirsiniz.
Avram

neden bu kabul edilen cevap değil? all () işleviyle çalıştı.
VishalParkash

36

Ayrıca, sadece önceki cevapları desteklemek için , ikinci parametre olarak eklenerek azalan descveya artan ascdüzenlerde sıralanabilir .

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

14

2017 güncellemesi


Laravel 5.4 sorgu oluşturucuya orderByDesc () yöntemleri ekledi:

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

10

Desc olarak date için sonuca ihtiyacınız varken

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

9

BUNU YAP:

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

BUNU YAPMAYIN:

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

NEDEN? Kısaca, ilk yaklaşım ikinci yaklaşımdan daha hızlıdır.


3
Neden bir açıklama eklemek iyi olurdu: İlk yaklaşım veritabanı (sorgu) düzeyinde hemen hemen her zaman çok daha verimli - en iyi performans - sipariş yapar . Model yaklaşımını her zaman kullan diyebilirim, ikinci yaklaşıma ihtiyacınız olduğunda bileceksiniz :)
jave.web


4

Not, şunları yapabilirsiniz:

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

Bu, aşağıdaki gibi bir sorgu oluşturur:

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

DB optimize edilmediğinde ve sorgu daha karmaşık olduğunda ve son SQL'de ORDER BY oluşturmayı önlemeniz gerektiğinde bazı uygulamalarda şunları yapabilirsiniz:

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

Şimdi sonucu sipariş php olduğunu.


0

Talimat almak için çağrı gerektirir, çünkü kayıtları ve siparişi getiriyor mu?

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

Misal:

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

Örnekte veriler "nerede" ile filtrelenir ve 20'den büyük kayıtları ve orderBy katalogunu yüksekten düşüğe doğru sıralar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.