Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“如何转换YII2查询”;其中;从数组到字符串的条件_Yii2 - Fatal编程技术网

“如何转换YII2查询”;其中;从数组到字符串的条件

“如何转换YII2查询”;其中;从数组到字符串的条件,yii2,Yii2,我有一个where()方法的条件数组,可以成功地添加到查询生成器中: $condition = [ 'AND', ['archived' => 0], ['broken' => 0], ['gender' => 1], [ 'OR', ['visible' => 1], ['status' => 1], ], ]; 但在某些地方,我需要将这个数组转

我有一个
where()
方法的条件数组,可以成功地添加到查询生成器中:

 $condition = [
     'AND',
     ['archived' => 0],
     ['broken' => 0],
     ['gender' => 1],
     [
         'OR',
         ['visible' => 1],
         ['status' => 1],
     ],
 ];
但在某些地方,我需要将这个数组转换为字符串

(`archived` = 0) AND (`broken`= 0) AND (`gender` = 1) AND (`visible` = 1 OR `status` = 1)
然后将其放置到
select()
方法中,就像原始SQL语句一样

SUM(IF((`archived` = 0) AND (`broken`= 0) AND (`gender` = 1) AND (`visible` = 1 OR `status` = 1)))
您需要使用将参数传递给主查询:

$sql = Yii::$app->db->queryBuilder->buildCondition($condition, $params);
$query
    ->select([
        'myField' => "SUM(IF($sql, 1, 0))"
    ])
    ->addParams($params);

为什么需要它是字符串,不能使用子查询吗?如何在
SUM(IF(…)
中插入查询对象?如果查询与某个
ActiveRecord
模型相关,则最好使用它的
getDb()
方法而不是
Yii::$app->db
以确保使用相同的连接组件。顺便说一句,我们不能将创建确定字符串放在单独的方法中。在我们获取数据的方法中,它只能一次使用