Tobilog-Selection
こんにちは!トビログ管理人のトビログです。
今回は、Laravel8やLaravel9(それ以外でも)にて複数の項目やカラム名で並び替えをしたい場合、どうすべきか、解説をしていきます。
結論
データベースの情報をカラム名「name」と「age」で並び替えしたい場合は、
$sorted = $collection->sortBy([
['name', 'asc'],
['age', 'desc'],
]);
のように書けばOKです!
管理人
acsは昇順(小さいもの順)、descは降順(大きいもの順)
だよ!
また、上に書いたものが優先されるよ!
$collection = collect([
['name' => 'Taylor Otwell', 'age' => 34],
['name' => 'Abigail Otwell', 'age' => 30],
['name' => 'Taylor Otwell', 'age' => 36],
['name' => 'Abigail Otwell', 'age' => 32],
]);
$sorted = $collection->sortBy([
['name', 'asc'],
['age', 'desc'],
]);
$sorted->values()->all();
/*
[
['name' => 'Abigail Otwell', 'age' => 32],
['name' => 'Abigail Otwell', 'age' => 30],
['name' => 'Taylor Otwell', 'age' => 36],
['name' => 'Taylor Otwell', 'age' => 34],
]
*/
8.x コレクション Laravel
(上記より引用)
解説①〜そもそもコレクションって?〜
今回のコードの解説をしていきます。
まず、
$collection = collect([
['name' => 'Taylor Otwell', 'age' => 34],
['name' => 'Abigail Otwell', 'age' => 30],
['name' => 'Taylor Otwell', 'age' => 36],
['name' => 'Abigail Otwell', 'age' => 32],
]);
についてです。
おそらく、dbからの情報を受け取った結果が上の$collectionに入っているはずです。
(Userとかだったら、こんな感じ)
$user = User::all()
ここで大事なことは、以下のコードのようにしてはならないということです。
// ageが30より上のものを取り出す。
$user = User::where('age','>','30');
これではlaravelの「コレクション」という形になっていません。
そのため、上のようなコードではなく、
$user = User::where('age','>','30')->get();
とする必要があります。
管理人
->get();
があることで、
コレクションの形になるから、
コレクションを扱う関数sortByが使えるのね
解説②〜sotrByの使い方〜
では、実際にコレクションを使っているsotrByの使い方について説明していきます。
sortByというのは、laravelが用意してくれているsort(=並び替え)に関する関数です
7.x コレクション Laravel
コレクション(=多次元配列的な)のを並び替えるのにとても便利なものとなっています!
まとめ
laravel8やlaravel9(それ以外でも)にて複数の項目やカラム名で並び替えをしたい場合は、コレクションのsortに配列を渡すことでできるということが分かりました!
トビログでは他にもlaravelの記事をたくさん書いているのでぜひみてみてくださいね!
Laravel
「Laravel」の記事一覧です。
コメント