1 回答

TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超8個(gè)贊
如果一個(gè)產(chǎn)品可以有多個(gè)屬性,簡(jiǎn)單的連接會(huì)為每個(gè)屬性生成多行(因此一個(gè)產(chǎn)品可能會(huì)重復(fù)多次):
| product.id | product_attribute.attribute_id | product_attribute.value |
| ---------- | ------------------------------ | ----------------------- |
| 1 | 120 | red |
| 1 | 121 | 1000kg |
因此,如果您創(chuàng)建一個(gè)包含兩個(gè)屬性條件的查詢(xún),它們將永遠(yuǎn)不會(huì)被滿(mǎn)足,因?yàn)闆](méi)有任何行會(huì)匹配“顏色 = 紅色和重量 = 1000kg”條件。您需要在一行中加入多個(gè)屬性,以獲得如下內(nèi)容:
| product.id | pa1.attribute_id | pa1.value | pa2.attribute_id | pa2.value |
| ---------- | ---------------- | --------- | ---------------- | --------- |
| 1 | 120 | red | 121 | 1000kg |
為此,您需要?jiǎng)h除帶有屬性的直接連接:
$query->joinWith(['productDesc','productCategory']);
并為每個(gè)過(guò)濾器分別連接每個(gè)屬性:
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 關(guān)注
- 156 瀏覽
添加回答
舉報(bào)