class Article {
public function Tag(){
return $this->belongsToMany('App\Tag');
}
}
class Tag {
public function Article(){
return $this->belongsToMany('App\Article');
}
}
article_id === tag_id
我想搜索所有书籍使用标签的名称。我怎么能这样做?
public function tagArticle($name)
{
$tags = $this->tag->where('name',$name)->get();
$articles = [];
foreach ($tags as $tag) {
$articles[] = $tag->articles;
}
return view('front.home')->with('articles',$articles);
}
这是我的解决方案,但我认为它并不好。有没有人有其他解决方案?谢谢。
答案 0 :(得分:1)
使用whereHas()
$articles=Article::whereHas('tags',function($query)
{
$query->where('name',$name);
})->get();
答案 1 :(得分:1)
map
使用flatten
会更好。
$tags = $this->tag->where('name',$name)->get();
$articles = $tags->map(function($v) {
return $v->articles;
})
->flatten()
->all();
flatten将返回同一级别的所有文章
[
articleObject,
articleObject,
articleObject,
]
答案 2 :(得分:1)
$tags = $this->tag->where('name', $name)->with('articles')->first();
此代码将加载标记及其所有文章。