我在每个文件中都有相应功能的文章和标签模型:
文章.php:
public function tags()
{
return $this->belongsToMany('App\Tag')->withTimestamps();
}
标签.php:
public function articles()
{
return $this->belongsToMany('App\Article');
}
在 Blade View 中,我可以通过调用
来访问具有相应标签的文章@foreach($tag->articles as $article)
...
@endforeach
从上面,我可以访问单个标签的多篇文章。我们如何过滤具有多个标签的文章,比如在 Tag 模型中仅包含 tag1
和 tag2
的文章?
最佳答案
这是 native way做你想做的事:
$tags = ['tag1', 'tag2'];
$articles = Article::whereHas('tags', function ($query) use ($tags) {
$query->whereIn('tag', $tags);
})->get();
如果你愿意,你可以使用动态查询范围来让它稍微更具可读性:
// Article.php
public function scopeTagged($query, $tags)
{
$query->whereHas('tags', function ($q) use ($tags) {
$q->whereIn('tag', (array)$tags);
});
}
这样你就可以在查询文章时这样做:
Article::tagged('tag1')->get();
Article::tagged(['tag1', 'tag2'])->get();
关于php - Laravel 模型数据的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40901200/