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