1 回答
TA贡献1860条经验 获得超8个赞
如果一个产品可以有多个属性,简单的连接会为每个属性生成多行(因此一个产品可能会重复多次):
| product.id | product_attribute.attribute_id | product_attribute.value |
| ---------- | ------------------------------ | ----------------------- |
| 1 | 120 | red |
| 1 | 121 | 1000kg |
因此,如果您创建一个包含两个属性条件的查询,它们将永远不会被满足,因为没有任何行会匹配“颜色 = 红色和重量 = 1000kg”条件。您需要在一行中加入多个属性,以获得如下内容:
| product.id | pa1.attribute_id | pa1.value | pa2.attribute_id | pa2.value |
| ---------- | ---------------- | --------- | ---------------- | --------- |
| 1 | 120 | red | 121 | 1000kg |
为此,您需要删除带有属性的直接连接:
$query->joinWith(['productDesc','productCategory']);
并为每个过滤器分别连接每个属性:
foreach ($filter_results as $attr_id => $filter_res) {
$query->joinWith("productAttributes as productAttributes{$attr_id}");
$query->andWhere([
"productAttributes{$attr_id}.attribute_id" => $attr_id,
"productAttributes{$attr_id}.value" => $filter_res,
]);
}
- 1 回答
- 0 关注
- 172 浏览
添加回答
举报
