我有以下雄辩的模型:
用户 | ID
发布 | ID
评论 | id | post_id | USER_ID
使用eloquent,如何获取特定用户尚未评论的所有帖子?
我到目前为止尝试过:
在模型发布:
中public function noCommentOf(User $user) {
$this->hasNot('App\Comment')->commentOf($user);
}
在模型评论:
中public function commentOf($query, User $user) {
return $query->where('user_id', '=', $user->id);
}
答案 0 :(得分:8)
我这样做的方法是查询具有Post
关系的whereDoesnthave
模型。在您的控制器中:
public function getPostsWithoutCommenter(){
$userId = 1; // Could be `$user`, `use($user)` and `$user->id`.
$posts = \App\Post::whereDoesntHave("comments", function($subQuery) use($userId){
$subQuery->where("user_id", "=", $userId);
})->get();
}
这将假设comments
模型上定义Post
为:
public function comments(){
return $this->hasMany(Comment::class);
}
基本上,如果与comments
的检查的$userId
关系返回Collection
,则会从结果集中忽略它。
答案 1 :(得分:3)
发布模型
public function comments()
{
return $this->hasMany(Comment::class)
}
然后获得帖子
$posts = Post:: whereDoesntHave('comments', function ($query) use ($userId) {
$query->where('user_id', $userId);
});
获取没有评论的帖子
$posts = Post::has('comments', '=', 0)->get();
答案 2 :(得分:0)
我想:
$user->post()->leftJoin('comments', 'posts.id', '=', 'comments.post_id')->whereNull('comments.id');