Laravel 5.2 - 仅选择有评论的文章

时间:2016-06-12 14:27:04

标签: php laravel laravel-5 eloquent laravel-5.2

我建立了一个评论系统,我正在一个页面上显示所有等待批准的评论。

关系:

Article.php

public function comments()
{
    return $this->hasMany('App\ArticleComment');
}

ArticleComment.php

public function article()
{
    return $this->belongsTo('App\Article');
}

现在,我想只选择包含等待批准的评论的文章(status列上的article_comments列等于0。)

任何简单的方法吗? (当然,我可以获得所有文章并检查每一篇文章是否有评论)

2 个答案:

答案 0 :(得分:2)

$articles = Article::whereHas('comments', function($query) {
    $query->where('status', 0);
});

答案 1 :(得分:2)

另一个答案可行,但您要求使用简单(也可重复使用)的方法,因此我建议您使用以下内容在scope模型中创建ArticleComment方法:

Article模型中:

use App\ArticleComment;
use Illuminate\Database\Eloquent\Model;

class Article extends Model {

    // Relation for comments
    public function comments()
    {
        return $this->hasMany(ArticleComment::class);
    }

    // Relation for pending comments
    public function pendingComments()
    {
        return $this->comments()->pending();
    }
}

ArticleComment模型中:

// Query scope for pending comments
public function scopePending($query)
{
    $query->whereStatus(0);
}

所以,你可以使用这样的东西:

$posts = Post::has('pendingComments')->get();

此外,您可以链接with,如:

$posts = Post::has('pendingComments')->with('pendingComments')->get();