我正在Yii2中开发REST API。在搜索查询中我想实现这个
WHERE ((`variant_name` LIKE '%size%' AND `variant_value`
LIKE '%12%') OR (`variant_name` LIKE '%color%' AND `variant_value` LIKE '%12%'))
variant_name和variant_value是URL中发送的数组。 我现在正在使用的相应的Yii2代码如下
$query->andFilterWhere(['or',
['or like', 'pvo.variant_name', $this->variant_name],
['or like', 'pvo.variant_value', $this->variant_value]])
->groupBy(['pvo.product_variant_id'])
->having(['count(product_variant_id)' => count($this->variant_name)]);
;
哪个生成以下SQL
AND ((`variant_name` LIKE '%size%' OR .`variant_name` LIKE '%color%')
OR (`variant_value` LIKE '%13%' OR `variant_value` LIKE '%56%')))
但我希望varaint_name [0]和varaint_value [0]在具有AND条件的单括号中与varaint_name [1]和varaint_value [1]如上所述。 请指导我如何在Yii2中解决这个问题?
答案 0 :(得分:1)
如果你在get中使用数组,那么你应该在param中使用数组值,例如:
$query->andFilterWhere(['or',
['or like', 'pvo.variant_name', $this->variant_name[0]],
['or like', 'pvo.variant_value', $this->variant_value[0]],
['or like', 'pvo.variant_name', $this->variant_name[1]],
['or like', 'pvo.variant_value', $this->variant_value[1]],
])
->groupBy(['pvo.product_variant_id'])
->having(['count(product_variant_id)' => count($this->variant_name)]);