2016-06-12 2 views
1

Я построил систему комментариев, и я работаю над страницей, на которой отображаются все комментарии, ожидающие утверждения.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

Другой ответ будет работать, но вы просили легко (восстановление и повторное использование) подхода к использованию, так что я хотел бы предложить создать метод 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(); 
2
$articles = Article::whereHas('comments', function($query) { 
    $query->where('status', 0); 
}); 
+0

Убедитесь, что добавить '-> получить()' в конце –

Смежные вопросы