質問: Laravel、EloquentのorderByを使ってデータベースから取得した情報をソートして使っています。 今、2つのデータテーブルがあるとします。 1つ目は、ユーザーテーブルで、ユーザーの名前などが入っています。 ユーザーテーブル ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ id name ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 2つ目は、グループメンバーテーブルで、ユーザーテーブルのIDと別で定義しているグループのIDが紐づいて、どのグループにどのメンバーが入っているかを管理しているテーブルがあります。 グループメンバーテーブル ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ id user_id group_id permission ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ グループテーブル ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ id name ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 今回、このグループメンバーのGetAPIを叩いて取得した情報を、名前の昇順で権限別に並び変えたいと思っています。 ただ、名前の昇順で並び変えようと思った時に、グループメンバーテーブルにorderByを使ってもID順に並ぶだけで、名前の昇順には並び変わりません。 GROUPMEMBER::orderBy('user_id','asc')->('permission','desc')->get(); orderBy('user_id','asc')の部分をID順に並び変えるのではなく、ユーザーテーブルを見に行って、ユーザーテーブルの「name」の昇順で並び変えてgetしたいです。 宜しくお願い致します。
回答: 上記の方の通り、テーブルをjoinしてあげるとよいと思います。 eloquentで書くなら下記のような感じかと。(上記の方を参考に書きます) ``` $users = GROUPMEMBER::leftjoin('ユーザテーブル', 'グループメンバーテーブル.user_id', '=', 'ユーザーテーブル.id') ->leftjoin('グループテーブル', 'グループメンバーテーブル.group_id', '=', 'グループテーブル.id') ->select('グループメンバーテーブル.*') ->where(...) ->orderBy('ユーザーテーブル.name', 'asc') ->orderBy('グループメンバーテーブル.permission', 'desc') ->get(); ``` カラム同士の相関がわからないですが、こんな感じで思ったものが取れると思います。 joinについてよくわからない場合は下記を参考にしてください。