Php Laravel 5/Elount-查询过滤属于多个关系

Php Laravel 5/Elount-查询过滤属于多个关系,php,laravel,eloquent,orm,Php,Laravel,Eloquent,Orm,假设我的数据库中有以下关系: 产品 id |名称 类别 id |名称 产品类别 id |产品|类别| id 我可以使用Elounce的模型,通过“归属”关系轻松构建它: 产品具有“类别”公共功能,称为“类别”,类别具有“产品”公共功能 现在,我有一个页面,用户希望通过单击类别名称来过滤给定类别的所有产品 程序将把类别id传递给我的控制器,现在开始解决问题 我可以通过编写以下代码“手动”轻松完成: $products = Product::query()

假设我的数据库中有以下关系:

产品

id |名称

类别

id |名称

产品类别

id |产品|类别| id


我可以使用Elounce的模型,通过“归属”关系轻松构建它: 产品具有“类别”公共功能,称为“类别”,类别具有“产品”公共功能

现在,我有一个页面,用户希望通过单击类别名称来过滤给定类别的所有产品

程序将把类别id传递给我的控制器,现在开始解决问题

我可以通过编写以下代码“手动”轻松完成:

            $products = Product::query()
            ->leftJoin('product_category', 'product.id', '=', 'product_category.product_id')
            ->leftJoin('category', 'product_category.category_id', '=', 'category.id')
            ->where('category_id', '=', 2);
但这将使在模型类中定义关系的过程几乎毫无用处

有没有更好的制作方法,也许是使用ORM的东西


非常感谢你

使用
where has

$products = Product::whereHas('categories', function ($q) {
    $q->where('id', request()->input('category_id'));
})->get();

看。

它就像一个符咒!谢谢我唯一需要修正的是where列的名称,因为id是“不明确的”。我必须明确地告诉他使用类别id。