模型hasMany与where条件的关系?

时间:2017-12-08 21:44:32

标签: php laravel laravel-query-builder

我可以使用以下代码获取每个类别的所有文章:

$category->article

现在我想要获得所有带有某些条件的文章(在文章表中)

我试试这个

$category->article->wherePublish(1)->
                    whereFeature('top')->latest()->
                    take(9)->get();

但是我收到了这个错误:

  

方法wherePublish不存在。

1 个答案:

答案 0 :(得分:1)

$category->article执行查询并获得一个集合。收藏集没有wherePublish和类似的魔术方法,这就是您收到错误的原因。

如果要过滤文章,请使用以下语法:

Article::where('category_id', $category->id)
    ->wherePublish(1)
    ->whereFeature('top')
    ->latest()
    ->take(9)
    ->get();

这适用于hasOnehasMany关系。对于belongsToMany使用whereHas()方法而不是where()

或者,您可以定义一个单独的关系,如:

public function filteredArticles()
{
    return $this->hasMany(Article::class, 'article_id')
        ->wherePublish(1)
        ->whereFeature('top')
        ->latest()
        ->take(9);
}

并使用它:

$category->filteredArticles