如何在laravel上正确制作过滤器产品?

时间:2018-10-18 06:37:21

标签: php laravel

我的模型产品具有范围:

public function scopeAttrSearch($query, $ids)
{
    $query->whereHas('attribute.attribute', function ($q) use ($ids) {
        foreach ($ids as $category => $values) {
            $q->whereIn('attribute_value_id', $values);
        }
    });

    return $query;
}

我在页面上有带有多个复选框的过滤器。每个组复选框都有一个过滤器类别。当用户单击复选框时,我将发送id过滤器类别和此复选框的id值。变量ids具有以下结构:

array:2 [ 
    1 => array:2 [ 
            0 => "1" 
            1 => "3" 
    ],

    3 => array:2 [ 
        0 => "5" 
        1 => "6" 
    ] 
 ]

其中13类别过滤器的ID。还有数组-这是过滤器的ID值复选框。

在控制器上,我将此范围称为:

    if (@$request->data['attrs']) {
        $_products = $_products->attrSearch($request->data['attrs']);
    }

并返回模板中已过滤产品的页面:

return $_products;

我有问题。过滤器工作。但是,如果我选中不同类别的复选框,则会得到空结果。如果我选中了同一类别的复选框-都可以运行,那么我将获得过滤产品。如何使用其他类别解决此问题?

产品中的模型关系:

public function attribute()
{
    return $this->hasMany('App\Models\ProductAttribute');
}

ProductAttribute:

public function attribute()
{
    return $this->belongsTo('App\Models\AttributeValue', 'attribute_value_id');
}

过滤器的类别ID包含列attribute_id

0 个答案:

没有答案