首页 > 解决方案 > 如何在 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" 
    ] 
 ]

类别过滤器的位置13id。以及它们的数组 - 这是过滤器的 id 值复选框。

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

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

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

return $_products;

我有个问题。过滤器工作。但是,如果我检查来自不同类别的复选框,我会得到空结果。如果我选中同一类别的复选框 - 所有工作,我会得到过滤的产品。我如何用不同的类别解决这个问题?

产品中的模型关系:

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

产品属性:

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

过滤器的类别 ID 有列attribute_id

标签: phplaravel

解决方案


推荐阅读