使用 where() 进行更多条件检查

可以使用下面给出的 where() 方法编写多个条件。

// Creates a new \yii\db\Query() object
$query = new \yii\db\Query();
$rows = $query->select(['emp_name','emp_salary']) 
        ->from('employee')
        ->where(['emp_name' => 'Kiran', 'emp_salary' => 25000]) // Specify multiple conditions
        ->one(); // Returns the first row of the result

上面的代码将获取名为 kiran 且薪水为 25000 的员工。如果多个员工满足上述条件,则调用 one() 确保仅获取第一个结果。要获取所有结果,你应该使用 all()

请注意,如果使用 all() ,结果将始终为数组; 即使只有一个或零结果。此数组包含所有结果作为数组,或者在没有记录匹配时为空。调用 one() 将直接返回结果数组,如果查询没有返回任何内容,则返回 false。

sql 中的等效代码如下所示。

select emp_name, emp_salary from employee where emp_name = 'Kiran' and emp_salary = 25000 limit 1;

下面给出了在 Yii2 中编写上述查询的另一种方法。

$rows = $query->select(['emp_name', 'emp_salary']) 
    ->from('employee')
    ->where(['emp_name' => 'Kiran'])
    ->andWhere(['emp_salary' => 25000])
    ->one();

可以使用 andWhere 指定其他一组条件。如果我们稍后需要向查询添加其他条件检查,这将非常有用。

指定多个条件的另一种方法是使用 where() 方法的**运算符格式。**上面的查询也可以写成如下所示。 ****

 $rows = $query->select(['emp_name','emp_salary']) 
    ->from('employee')
    ->where(['and', 'emp_name="kiran"', 'emp_salary=25000'])        
    ->one();

这里我们指定运算符’ ‘作为数组中的第一个元素。同样地,我们也可以使用’ ‘,’ 之间,’ 不在之间,’ ‘,’ 不在 ‘,’ 喜欢 ‘,’ 或像 ‘,’ 不喜欢 ‘,’ 或不喜欢 ‘,’ 存在 ’ ,’ 不存在 ‘,’ > ‘,’ <= ‘等作为运算符。

使用’in’和’like’的例子

假设我们需要找到薪水 20000,25000 和 50000 的员工。在普通的 sql 中,我们将查询编写为

select * from employee where salary in (20000,25000,50000)

在 Yii2 中,我们可以写如下。

$rows = $query->from('employee')
        ->where(['emp_salary' => [20000,25000,50000]]) 
        ->all();

指定相同条件的另一种方法是

$rows = $query->from('employee')
    ->where(['in', 'emp_salary', [20000,25000,50000]]) // Making use of operator format of where() method
    ->all();

同样**,**如果我们想要让所有员工没有薪水 20000,25000 和 50000,则可以指定 ’ not in ‘而不是’ in ‘。

现在让我们看一些在 where() 条件中使用’ like ‘的例子。假设我们需要找到名字中包含字符串’ gopal ‘的所有员工。名称可以是 venugopal,rajagopal,gopalakrishnan 等 .sql 查询如下。

select * from employee where emp_name like '%gopal%'

在 Yii2 中,我们将其写为

 $rows = $query->from('employee')
        ->where(['like', 'emp_name', 'gopal']) // Making use of operator format of where() method
        ->all();

如果我们需要找到名字中包含字符串’ gopal ‘和’ nair ‘的所有员工。我们可以写作

   $rows = $query->from('employee')
        ->where(['like', 'emp_name', ['gopal','nair']]) // Making use of operator format of where() method
        ->all();

这将评估为

从员工中选择*,其中 emp_name 如’%gopal%‘和’%nair%’

同样,我们可以使用’ not like ‘来表示所有员工的姓名中都没有字符串’ gopal ‘和’ nair ‘。