レコードの並び替えの方法

概要

laravelアプリにおける、レコードの並び替えの方法です。

例えばmemosというテーブルがあったとして、foreachで展開すると昇順(古いメモが一番上にくる並び)になりますよね。

これを降順、すなわち新しいものが上にくるように並び替える方法です。

方法

orderByメソッドを用いて並べ替えをします。

使用例

$memos = App\Models\Memos::orderBy("id", "desc")->get();

# 最後のget()を忘れないように。

注意点

注意点は、リレーションで取得した配列に対してはorderByを用いることはできないということです。

例えば、あるユーザーに紐づいているメモだけを光順で並べたい場合には、以下のコードではエラーになります。

 

エラーになる例

$memos = Auth::user()->memos->orderBy("id", "desc")->get();

orderByはあくまでもMySQLの機能なので、リレーションで定義している(Model由来の)配列には使えないということですね。

 

なので、この場合は以下のように記述することになります。

 

修正後

$memos = App\Models\Memos::where("user_id", Auth::user()->id)->orderBy("id", "desc")->get();

 

まとめ

Railsのときにもorderメソッドがモデルクラス全体に対してしか使用できないという規則がありました。

この辺りはMySQLの決まり事なのでどの言語でも大枠は同じということですね。