php - Laravel 模型数据的交集

标签 php laravel laravel-5 laravel-5.2

我在每个文件中都有相应功能的文章和标签模型:

文章.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 模型中仅包含 tag1tag2 的文章?

最佳答案

这是 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/

相关文章:

php - Laravel exec() 产生一个 mysql-dump 空文件

php - Laravel 查询转义句点 (.)

php - Solr(solarium)与database.php中的laravel 5连接

php - 如果存在重定向,Google 机器人是否会抓取整个网站

php删除字符串中的所有内容,保留最后一位

php - mysql_fetch_array 仅获取第一个结果,即使使用 while 循环

php - Laravel 5.2 的数据库连接设置

php - Image Magick 将文件写入文件夹

php - Laravel 正在发送 GET 而不是 POST 请求

php - Laravel 5.5 中 $request->user() 返回 null