0

使用这个解决方案,我怎样才能让我的$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。

4

1 回答 1

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();

您可以替换<>!=not in在使用主要类别 ID 数组的情况下。

在官方文档中阅读更多关于构建where条件的信息。

更新:无需更改整个$conditions数组和复制粘贴。您可以$type像这样计算示例:

switch ($type) {
    case 2:
        $typeValue = 3;

        break;
    case 3:
        $typeValue = 4;

        break;
    default:
        $typeValue = 2;
}

这个逻辑有点奇怪(也许增量 +1 会更好)。

然后在这里插入$typeValue而不是静态值'type'=> $typeValue

即使您有一些复杂的查询构造,您也可以将查询划分为单独的where//并动态更改它orWhereandWhere

于 2015-08-08T06:47:03.930 回答