【laravel,php】すべてのユーザーのお気に入りを取得して1つ表示する方法

こんにちわ。ライオンの中の人です。

ログインしているユーザーのお気に入りだけでなく、ユーザー関係なしにすべてのユーザーのお気に入りからデータを取得してくる方法です。

実は最初に1つ目を作ったのですが、2つ目で良いことがわかりました。2つ目のほうがシンプルで良いです。

ただ1つ目は色々な関数を使っていて勉強になったので備忘録として残しておきます。

まずはコントローラーです。

お気に入りからランダムで取得する1つ目

少しややこしいですが解説します。

まず$user->$questions()で、userが作ったお気に入りを取得しています。その後のpluck関数は、引数のカラムのみを引っ張ってくる関数です。

そのため、->pluck(question_id)で、questionsテーブルのquestion_idカラムを引っ張ってきています。

Question::whereIn(‘questions.id’,$questions)

これはすべてのquestionから、questions.idと先程代入した$questionsが等しいデータをすべて取得しています。最後に->inRandomOrder()でランダムに並び替え、 ->first()で1番上を取得してreturnしています。

お気に入りからランダムで取得する2つ目

ただこちらで良いです。動作確認できた後で気がつきました。

備忘録です。記事は以上です。