如何使用Eloquent在Laravel中编写以下SQL查询?
我想在Laravel中编写一个查询来检索特定用户查看的所有帖子。 user_id
和post_id
保存在名为WatchHistory
的表中。如何使用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();
希望这项工作你!!!!
其实我在尝试这个问题之前先试过。这里的问题是,我得到一个错误,说user_id没有被定义,虽然它是在范围内定义的。 –
@SaviourTom因为你必须在'function($ query)'后面的'use($ user_id)'''中使用这个变量,所以它看起来像:'function($ query)use($ user_id)'。顺便说一句,您已经投票选出的答案是最好的答案是使用查询生成器,而不是雄辩。 –
我在想为什么它不工作。非常感谢答案。 @forexknight –
试试这个,
如果你的用户ID是可变$user_id
,你可以不喜欢它,
DB::table('post')->whereIn('post_id',
DB::table('watchhistory')->where('user_id',$user_id)->pluck('post_id')
)->get();
非常感谢您的回答。有用。但我想使用雄辩,以优化性能。 –
我以为你没有使用雄辩,所以我已经添加了我的答案 –
此查询是否正确? WHERE user_id = user_id是什么? –