概要
MySQLではnull許可のカラムでORDER BYすると、nullの行が先に取り出される。
例えばLaravelでHoge::orderBy('score', 'asc')->get()とすると、scoreがnullの行が先に取り出され、その後にscoreがnullではない行が昇順で取り出される。
nullを後ろにする方法
Hoge::orderByRaw('score is null asc, score asc')とすると、scoreがnullではない行が先、nullの行が後に取り出される。
※ Hoge::orderByRaw('score is null asc')のように解説しているサイトもあるが、これだとnullは後ろになるが、なぜかscoreがうまくソートされないことがある。
⇒もし詳しい人がいましたら、コメントください。
中間テーブルの場合
中間テーブルのソートにはorderByPivotメソッドを使うが、orderByPivotRawメソッドは用意されていない。
よって、orderByRawメソッドを使ってソート対象カラムを直接指定する。
$this->belongsToMany(Hoge::class)->withPivot()->orderByRaw('score is null asc, score asc');

コメント