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