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