モデルをDBから取得するときやoneToManyのリレーションを並び替えるときに、複数の条件で並び替えたい場合があります。
1つ目の条件では値が同じで並び順が決定できず、2つ目の条件で優先順位を決定する場合などです。
複数条件での並び替え方法1 orderByを連続
単純にorderbyを複数つなげることで、複数の並び替え条件となります。
Profile::orderBy('ranked_at', 'desc')
->orderBy('rank', 'asc')
->get();
上記の例だとORDER BY `ranked_at` DESC, `rank` ASC というクエリになります。
複数条件での並び替え方法2 orderByRaw
orderByRawを使えば自由にORDERBY句を記述することができます。もしFIELD関数などを使用したい場合はこちらで書いても良いでしょう。
Profile::orderByRaw('ranked_at desc, rank asc')
->get();