Laravel Eloquent:all()の注文結果


214

簡単な仕事にこだわっています。この通話の結果を注文するだけです

$results = Project::all();

Projectモデルはどこですか。私はこれを試しました

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

しかし、それはうまくいきませんでした。テーブルからすべてのデータを取得して順序付けするためのより良い方法はどれですか?

回答:



114

オブジェクトのコレクションを返すのでall()を使用したい場合は、orderBy(クエリレベル)ではなくsortBy(コレクションレベル)を使用できます。

昇順

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

降順

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

詳細については、コレクションに関するドキュメントをご覧ください。

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


まさに私が探していたもの。これを広範囲に使用するとorderBy、クエリレベルで使用する場合と比べて欠点がありますか?
Giedrius

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

2
これが舞台裏でどのように機能するか知りたいです。データベースで行われているsortBy()間、コレクションの並べ替えがLaravelエンジン(PHP)内でorderBy()行われているように感じます。確かに、データベースは考えられるほとんどすべての状況でより高速になるでしょう。また、データセットが増えると、パフォーマンスのばらつきも大きくなります。これについて他の人の考えを聞いてみたいです。
cartbeforehorse 2017

3
@cartbeforehorseどのメソッドが何を返すかを知る必要があります。:: all()は、フードの下で-> get()を呼び出すだけで、コレクションを返します。sortBy()はコレクションのメソッドなので、そうです(クエリオブジェクトで呼び出されるorderBy()とは対照的に)PHP側で発生します。PHPで並べ替えることは言うまでもなく、:: all()を使用するのは悪い考えです。:: all()が100万のオブジェクトを含むコレクションを返す場合を想像してください。それをフェッチするには時間がかかりすぎ、PHPでソートするにはさらに時間がかかります。もちろん、コレクション内の少数のオブジェクトのみを返すことが確実にわかっている場合は、:: all()を使用できます。
Avram

なぜこれは受け入れられない答えですか?all()関数で動作しました。
VishalParkash

36

さらに、前者の回答を強化するためだけに、2番目のパラメーターとしていずれかを追加することにより、降順descまたは昇順でソートすることもできascます。

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


10

あなたはdescとして日付の結果が必要ですが

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

9

これを行う:

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

これをしないでください:

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

どうして? 簡単に言うと、最初のアプローチは2番目のアプローチよりも高速です。


3
理由を追加するとよいでしょう。最初のアプローチは、ほとんどの場合ずっと効率的であるデータベース(クエリ)レベルでの順序になります-最高のパフォーマンス。私は常にモデルアプローチを使用すると思います。2番目のアプローチが必要になると、次のことがわかります。)
jave.web


4

次のことができます。

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

これにより、次のようなクエリが生成されます。

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

一部のアプリでは、DBが最適化されておらず、クエリがより複雑で、終了SQLでORDER BYを生成しないようにする必要がある場合は、次のようにできます。

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

結果を注文するphpです。


0

レコードとorderByがカタログに表示されるため、取得するには呼び出しが必要です。

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

例:

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

この例では、データは「where」でフィルタリングされ、20を超えるレコードと、orderByカタログが上位から下位へと並べられます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.