我建立了一个评论系统,我正在一个页面上显示所有等待批准的评论。
关系:
Article.php
public function comments()
{
return $this->hasMany('App\ArticleComment');
}
ArticleComment.php
public function article()
{
return $this->belongsTo('App\Article');
}
现在,我想只选择包含等待批准的评论的文章(status
列上的article_comments
列等于0
。)
任何简单的方法吗? (当然,我可以获得所有文章并检查每一篇文章是否有评论)
答案 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();