我的模型产品具有范围:
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"
]
]
其中1
和3
类别过滤器的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