Yii2:如何编写以下Active Query?

时间:2015-08-08 06:24:20

标签: yii2 yii2-model

使用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。

1 个答案:

答案 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中划分查询并动态更改。