Yii - 查詢構建器



查詢構建器允許您以程式設計方式建立 SQL 查詢。查詢構建器幫助您編寫更易讀的 SQL 相關程式碼。

要使用查詢構建器,您應該按照以下步驟操作:

  • 構建一個 yii\db\Query 物件。
  • 執行查詢方法。

要構建一個yii\db\Query物件,您應該呼叫不同的查詢構建器函式來定義 SQL 查詢的不同部分。

步驟 1 - 要展示查詢構建器的典型用法,請修改actionTestDb方法如下所示。

public function actionTestDb() {
   //generates "SELECT id, name, email FROM user WHERE name = 'User10';"
   $user = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where(['name' => 'User10'])
      ->one();
   var_dump($user);
}

步驟 2 - 訪問https://:8080/index.php?r=site/test-db,您將看到以下輸出。

Query Builder

Where() 函式

where()函式定義查詢的 WHERE 部分。要指定WHERE條件,您可以使用三種格式。

  • 字串格式 - 'name = User10'

  • 雜湊格式 - ['name' => 'User10', 'email' => 'user10@gmail.com']

  • 運算子格式 - ['like', 'name', 'User']

字串格式示例

public function actionTestDb() {
   $user = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where('name = :name', [':name' => 'User11'])
      ->one();
   var_dump($user);
}

輸出如下。

String Format Example Output

雜湊格式示例

public function actionTestDb() {
   $user = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where([
         'name' => 'User5',
         'email' => 'user5@gmail.com'
      ])
      ->one();
   var_dump($user);
}

輸出如下。

Hash Format Example Output

運算子格式允許您以下列格式定義任意條件:

[operator, operand1, operand2]

運算子可以是:

  • and - ['and', 'id = 1', 'id = 2'] 將生成 id = 1 AND id = 2 或:類似於 and 運算子

  • between - ['between', 'id', 1, 15] 將生成 id BETWEEN 1 AND 15

  • not between - 類似於 between 運算子,但 BETWEEN 被替換為 NOT BETWEEN

  • in - ['in', 'id', [5,10,15]] 將生成 id IN (5,10,15)

  • not in - 類似於 in 運算子,但 IN 被替換為 NOT IN

  • like - ['like', 'name', 'user'] 將生成 name LIKE '%user%'

  • or like - 類似於 like 運算子,但 OR 用於分割 LIKE 謂詞

  • not like - 類似於 like 運算子,但 LIKE 被替換為 NOT LIKE

  • or not like - 類似於 not like 運算子,但 OR 用於連線 NOT LIKE 謂詞

  • exists - 需要一個運算元,該運算元必須是 yii\db\Query 類的例項

  • not exists - 類似於 exists 運算子,但構建 NOT EXISTS (子查詢) 表示式

  • <, <=, >, >=, 或任何其他 DB 運算子:['<', 'id', 10] 將生成 id<10

運算子格式示例

public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->where(['between', 'id', 5, 7])
      ->all();
   var_dump($users);
}

輸出如下。

Operator Format Example Output

OrderBy() 函式

orderBy()函式定義 ORDER BY 部分。

示例 -

public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->orderBy('name DESC')
      ->all();
   var_dump($users);
}

輸出如下。

OrderBy Function Example Output

groupBy() 函式

groupBy()函式定義 GROUP BY 部分,而having()方法指定 HAVING 部分。

示例 -

public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->groupBy('name')
      ->having('id < 5')
      ->all();
   var_dump($users);
}

輸出如下。

groupBy Function Example Output

limit()offset()方法定義LIMITOFFSET部分。

示例 -

public function actionTestDb() {
   $users = (new \yii\db\Query())
      ->select(['id', 'name', 'email'])
      ->from('user')
      ->limit(5)
      ->offset(5)
      ->all();
   var_dump($users);
}

您將看到以下輸出:

Limit Offset Fragments

yii\db\Query類提供了一組用於不同目的的方法:

  • all() - 返回一個名稱-值對的行陣列。

  • one() - 返回第一行。

  • column() - 返回第一列。

  • scalar() - 從結果的第一行和第一列返回一個標量值。

  • exists() - 返回一個值,指示查詢是否包含任何結果

  • count() 返回 COUNT 查詢的結果

  • 其他聚合查詢方法 - 包括 sum($q)、average($q)、max($q)、min($q)。$q 引數可以是列名或 DB 表示式。

廣告