我可以使用以下代码获取每个类别的所有文章:
$category->article
现在我想要获得所有带有某些条件的文章(在文章表中)
我试试这个
$category->article->wherePublish(1)->
whereFeature('top')->latest()->
take(9)->get();
但是我收到了这个错误:
方法wherePublish不存在。
答案 0 :(得分:1)
$category->article
执行查询并获得一个集合。收藏集没有wherePublish
和类似的魔术方法,这就是您收到错误的原因。
如果要过滤文章,请使用以下语法:
Article::where('category_id', $category->id)
->wherePublish(1)
->whereFeature('top')
->latest()
->take(9)
->get();
这适用于hasOne
和hasMany
关系。对于belongsToMany
使用whereHas()
方法而不是where()
。
或者,您可以定义一个单独的关系,如:
public function filteredArticles()
{
return $this->hasMany(Article::class, 'article_id')
->wherePublish(1)
->whereFeature('top')
->latest()
->take(9);
}
并使用它:
$category->filteredArticles