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"
]
]
类别过滤器的位置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');
}
产品属性:
public function attribute()
{
return $this->belongsTo('App\Models\AttributeValue', 'attribute_value_id');
}
过滤器的类别 ID 有列attribute_id
解决方案
推荐阅读
- angular - 无法从 ngOnInit() 中设置 page$.layout
- django - 为什么我的序列化程序字段不显示?
- arrays - CS50 Pset4 边缘编码 - 类型“RGBTRIPLE [宽度]”的索引 601 错误超出范围
- amazon-web-services - 在 us-east-1 区域中启动给定的 cloudformation 模板时出错。(构建 lambda 函数接收错误)
- python - 打印时如何去除 sys.argv 前后的空格?
- google-apps-script - 根据其他工作表列值隐藏或取消隐藏电子表格
- swift - 具有多个命令编码器的无记忆纹理
- r - R:等系数的优化问题
- javascript - 将滚动动画添加到导航栏中的页面跳转 URL
- metrics - 如何为 Splunk 指标检测我的代码?