2017-07-31 10 views
3

特定のユーザーが閲覧したすべての投稿を取得するためにLaravelにクエリを書きたいと思います。 user_idpost_idWatchHistoryという名前のテーブルに保存されます。Eloquentを使用してLaravelに次のSQLクエリを書くにはどうすればよいですか?

SELECT * 
FROM Post 
WHERE post_id = (
    SELECT post_id 
    FROM WatchHistory 
    WHERE user_id = $user_id 
); 

私は次のことを試してみました:

$posts = Post::whereIn('post_id', function($query){ 
     $query->select('post_id') 
      ->from(with(new WatchHistory)->getTable()) 
      ->where('user_id',$user_id); 
     })->get(); 

しかし、変数のuser_idが定義されていないことを私にエラーを与えます。

POST::whereIn('post_id', function($query) use($user_id){ 
      $query->select('post_id') 
       ->from(with(new WATHCHISTORY)->getTable()) 
       ->where('user_id',$user_id); 
      })->get(); 

・ホープ、この作品のために:

+0

このクエリは正しいですか? 'WHERE user_id = user_id'とは何ですか? –

答えて

3

を、このいずれかを試してみてください君は !!!!

+0

実際に私は質問をする前にまずこれを試しました。ここでの問題は、スコープ内で定義されていても、user_idが定義されていないというエラーが表示されることです。 –

+1

@SaviourTom 'function($ query)'の後に 'use($ user_id)'のような関数でこの変数を使わなければならないので、 'function($ query)use($ user_id)'のようになります。ところで、あなたが最良の答えとして投票した答えは、質問ビルダーであり、Eloquentではありません。 –

+0

私はなぜそれが働いていないのか考えていました。答えに感謝します。 @forexknight –

2

はあなたがこれを試してみてください、のように、ユーザーのIDが変数$user_id内にある場合、あなたはそれを行うことができます

DB::table('post')->whereIn('post_id', 
    DB::table('watchhistory')->where('user_id',$user_id)->pluck('post_id') 
)->get(); 
+1

お返事ありがとうございました。できます。しかし、パフォーマンスを最適化するために雄弁を使用したかったのです。 –

+0

私はあなたが雄弁を使用していないと思ったので、私は自分の答えを追加しました –

関連する問題