Laravel 8・Laravel9にて複数の項目で並び替えを行う場合

こんにちは!トビログ管理人のトビログです。

今回は、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」の記事一覧です。
とびうお
ブログ管理人です!
swimaneというアプリをリリースしました!

コメント

タイトルとURLをコピーしました