2017-09-25 71 views
4

我有以下型號口才:雄辯:hasNot與參數

用戶 |編號

|編號

評論 | id | post_id | user_id

使用雄辯,我如何獲取特定用戶尚未評論的所有帖子?

我試過到目前爲止:

在型號

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

並不難問題,有點複雜,但並不難。你到現在爲止解決這個問題做了什麼? –

+0

嗨!我添加了一些簡短的代碼片段,目前爲止我嘗試過。 – Frooplet

+0

好的,我會看看,會在幾分鐘後回來 –

回答

2

我會這樣做的方法是通過查詢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,這將是從結果集中忽略。

+0

好的,你比我快。好的解決方案 –

+0

謝謝,非常好的解決方案! :) – Frooplet

0

我想:

$user->post()->leftJoin('comments', 'posts.id', '=', 'comments.post_id')->whereNull('comments.id'); 
1

Post模型

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(); 
+0

怎麼樣沒有評論的帖子? –

+0

@AndriyLozynskiy更新了我的答案。 –