多对多关系中的范围查询

Ale*_*ler 1 laravel octobercms

我创建了 2 个模型,“发布”和“类别”。这是多对多的关系,效果很好。

我的表如下:

  • alex_blog_posts :帖子存储在“标题”、“已发布”等列中...
  • alex_blog_categories :类别存储在“title”、“parent_id”等列中...
  • alex_blog_posts_categories :在帖子和类别之间存储关系,列“post_id”,“category_id”

假设我想过滤与名称为“类别 1”的类别相关联的所有帖子

public function scopeFilterCategory($query) {
    $query->join(????); // My problem is to replace the ???
    $query->where('title', '=', 'Category 1');
    return $query;
}
Run Code Online (Sandbox Code Playgroud)

我对 october 和 laravel 还不够熟悉,我被困在这里。对于laravel专家来说可能非常简单,但我需要一个具体的例子来说明我尝试过的所有事情都失败了:/

谢谢你的帮助

小智 5

Laravel 有“whereHas”:

https://laravel.com/docs/5.5/eloquent-relationships#querying-relationship-existence

在 post 模型上,您需要编写此查询:

$posts = Post::whereHas($relationName, function ($query) {
     $query->where('title', =, 'Category 1');
})->get();
Run Code Online (Sandbox Code Playgroud)

$relationName - 应该是定义模型中关系的函数的名称(例如:'categories')