11
8

More than 3 years have passed since last update.

Laravelでリレーション先のカラムによってソート(orderBy)する方法

Last updated at Posted at 2020-01-28

環境:Laravel5.8,MySQL5.7

Laravelでリレーション先のカラムによってソートする方法。

Laravelでデータベースからリレーションを利用してデータを取得して並び替えをする時に、
親ではなく、子の情報で並び替えをしたい時があると思います。

例えば、Twitterの、自分のいいね欄に登録されているツイートの順番は、
ツイートが投稿された順番ではなく、自分がツイートをいいねした順番で並び替えされています。

これは、ツイート(親)に紐づく、Like(子)が作られた時間によって並び替えが行われている状態と考えられます。

ここでは、自分がいいねしたツイートを、いいねをした順番で取得する方法をまとめます。

条件

Tweet(親)→Like(子)と、
User(親)→Like(子)は、1対多の関係で結びついてるとし、
LikeはTweetのidと、Userのidを含んでいます。

Tweetを取得する際に、Likeのcreated_atをDESCの順で並び替えたいものとします。(新しいいいねが一番上に来る)

$posts = Tweet::select('tweets.*')
  ->join('likes', 'likes.tweet_id', '=', 'tweets.id')
  ->where('likes.user_id', Auth::user()->id) //ログインしている自分自身のid
  ->orderBy('likes.created_at', 'DESC')
  ->get();

return $posts;
11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8