在Yii Query构建器中多次调用

时间:2012-07-19 14:17:45

标签: yii query-builder

我想使用多个调用构建查询,但是在使用此代码时我有错误

$command = Yii::app()->db->createCommand()
    ->select('*')
    ->from('{{table}}');

$command->where('value1 = :value1', array(':value1' => 1));
$command->where('value2 < :value2', array(':value2' => 2));

我明白,我可以使用像

这样的代码
$command->where('value1 = :value1 AND value2 = :value2', array(':value1' => 1, ':value2' => 2));

但是我的条件比较困难,而且使用代码比较简单。

在Codeigniter中,我可以多次使用这些条件

$this->db->where()

2 个答案:

答案 0 :(得分:6)

你必须传递一个这样的数组:

$command->where(array('AND', 'value1 = :value1', 'value2 < :value2'), array(':value1' => 1, ':value2' => 2));

答案 1 :(得分:0)

实际上我找到了一个更好的方法来做到这一点

$result = array();
    $result = Yii::app()->db->createCommand()
            ->select('*')
            ->from('table');

    $condition = array();
    $cond_arg = array();

    if (!empty($email)) {

        $condition[] = "email =:email";
        $cond_arg[':email'] = $email;
    }

    if (!empty($value2)) {

        $condition[] = "value2 =:value2";
        $cond_arg[':value2'] = $value2;
    }

    if (!empty($value3)) {

        $condition[] = "value3 like :value3";
        $cond_arg[':value3'] = $value3;
    }


    if (count($condition) > 0) {
        $result->where(array('AND', implode(" AND ", $condition)), $cond_arg);
    }

    return $result->queryAll();