環境
Laravel: 8.82.0
PHP: 8.1.2
ascでNULLを後に持ってくる
Itemを昇順で並べてみます。
失敗パターン
$user = Auth::user();
$items = $user->items()->orderBy("price", "asc")->get();
値段が安いものから表示させたいと、上記のコードで並べてみると、、、、
非売品__が先に表示されてしまいます。
そう、非売品のpriceはNULL__なんです。
複雑な条件が必要なのか、
はたまたNULLとNULLでないもので分けて取得する必要があるのか
と色々考えながら、調べておりました。
->orderByRaw('column is null asc')
->orderByRaw('column is null asc')を使うと、NULLを後ろに回すことができます。
※columnの部分に DB のカラム名が入ります。
成功パターン
$user = Auth::user();
$items = $user->items()->orderByRaw('price is null asc')
->orderBy("price", "asc")->get();
これで、値段の安い順に並びつつ、
NULLである非売品は、後ろに並びます。