【发布时间】:2021-05-03 16:10:30
【问题描述】:
我试图使过滤器商店文章依赖于类似于tehnomanija 或Amazon product filtering 的复选框产品使用 laravel 过滤我的复选框。每篇文章最多可以有一个属性和一个与该属性相关的值。
我做到了:
AttributeValue::whereIn('id', $attributeValues)->orderBy('attribute_id')
->select('id', 'attribute_id')->get()
->each(function ($item) use (&$attributes) {
if (!isset($attributes[$item->attribute_id])) {
$attributes[$item->attribute_id] = [];
}
$attributes[$item->attribute_id][] = $item->id;
});
效果很好,在不同的子数组中创建一组选定的 id。但我不确定是否可以查询:
$articles->where(function ($q1) use ($attributes) {
foreach ($attributes as $attribute) {
$q1->whereIn('attr.attribute_value_id', $attribute);
}
});
但这并没有给我像这些示例页面那样的结果。 例如,如果我试图找到与此相关的电视:
- 车型年份:2020 年和 2019 年
- 连接类型:蓝牙和 USB
- 刷新率:60Hz 结果将支持我的产品列表,这些产品的型号为 2019 年或 2020 年,连接类型为蓝牙或 USB,刷新率为 60Hz
这是数据库的样子:
articles:
id name
1 Whirlpool Washing machine
attributes:
id name
1 Color
2 Size
3 Type
attribute_values
id attribute_id name
1 1 Red
2 1 White
3 1 Black
4 3 Freestanding
5 4 Built-in
article_attribute_values
id article_id attribute_value_id
1 1 1
2 1 4
【问题讨论】:
-
您是要在产品属性之间执行
OR操作,例如产品匹配这些属性中的任何一个,还是您需要AND操作,产品应该匹配所有这些属性 -
“连接类型”(蓝牙或 USB 或以太网)等相同属性中的值之间的 OR 以及每个属性(连接类型 AND 刷新率和型号年份)之间的 AND
-
好的,您能否向我们展示您的模型映射文章和属性以及这些属性如何保存在数据库中的示例数据?
-
添加了一些与之相关的示例和数据库方案