精确过滤

时间:2018-11-18 09:22:20

标签: sql laravel eloquent

我尝试从数据库中获取所有产品,并基于request parameters进行过滤
所以我创建了一些Models,例如ProductPropertyAttribute。并在many to manyProduct and Property之间创建Product and Attribute关系。

这是我查询的一部分:

$products = Product::where('status', 'accept')

        ->when(request('properties'), function ($query) {
            return $query->whereIn('id', request('properties'));
        })
        ->when(request('attributes'), function ($query) {
            return $query->whereIn('id', request('attributes'));
        })->get();

所以这里没有错误,但是我想在这里更改的是属性过滤的想法。

我想将whereIn过滤更改为whereExact过滤。多数民众赞成在我将request('attributes')的值按[1,2]发送到此查询的地方,我希望结果应该是:

  

所有具有id = 1属性并具有id = 2属性的产品

1 个答案:

答案 0 :(得分:0)

尝试将foreachwhereHas()一起使用:

$products = Product::where('status', 'accept')
    ->when(request('properties'), function ($query) {
        foreach(request('properties') as $id){
            $query->whereHas('properties', function($query) use ($id){
                $query->where('id', $id);
            });
        }
    })
    ->when(request('attributes'), function ($query) {
        foreach(request('attributes') as $id){
            $query->whereHas('attributes', function($query) use ($id){
                $query->where('id', $id);
            });
        }
    })->get();

whereHas()的第一个参数应为关系的方法名称。