使用this solution,如何将$conditions
变量发送到我的有效查询?
$conditions = 'main_category_id != :main_category_id', ['category_status' => 1, 'main_category_id' => 0, 'sub_category_id' => $id,'type'=> 4];
$result = Category::find()->where($conditions)->orderby('category_name ASC')->all();
在我的查询main_category_id != 0
上。任何其他有效的解决方案也很好
请注意,我需要$conditions
变量,因为它们各不相同。这是我对if语句的查询:
public function get_subcategory_list($id="",$type="")
{
$conditions = ['category_status' => 1, 'main_category_id' => 0, 'main_category_id' => $id, 'type' => 2];
if($type == 2){
$conditions = ['category_status' => 1, 'main_category_id' => 0, 'sub_category_id' => $id, 'type' => 3];
}
if($type == 3){
$conditions = ['category_status' => 1, 'main_category_id' => 0, 'sub_category_id' => $id,'type'=> 4];
}
$result = Category::find()->where($conditions)->orderby('category_name ASC')->all();
return $result;
}
请注意,$conditions
在上述功能上运行正常,唯一的问题是main_category_id
不应该等于0。
答案 0 :(得分:2)
你不能像你那样分配变量($conditions
),它无效。
您的ActiveQuery
可以这样写:
$models = Category::find()
->where(['<>', 'main_category_id', 0])
->andWhere([
'category_status' => 1,
'sub_category_id' => $subCategoryId,
'type'=> 4,
])
->orderBy(['category_name' => SORT_DESC])
->all();
如果使用主要类别ID数组,您可以将<>
替换为!=
或not in
。
详细了解如何在official docs中构建where
条件。
更新:无需更改整个$conditions
数组和复制粘贴。您可以像这样计算$type
:
switch ($type) {
case 2:
$typeValue = 3;
break;
case 3:
$typeValue = 4;
break;
default:
$typeValue = 2;
}
这个逻辑有点奇怪(也许增量+1会更好)。
然后只需在此$typeValue
插入'type'=> $typeValue
而不是静态值。
即使您有一些复杂的查询构建,您也可以在单独的where
/ orWhere
/ andWhere
中划分查询并动态更改。