Yii查詢生成器
查詢生成器允許以編程的方式來創建 SQL 查詢。 QueryBuilder幫助您編寫更加易讀的 SQL 相關的代碼。
要使用查詢生成器,應該遵循以下步驟 -
構造一個 yii\db\Query 對象.
執行 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步 - 在瀏覽器打開URL地址: http://localhost:8080/index.php?r=site/test-db ,會看到輸出如下圖所示。
Where()函數
在 where() 函數定義了一個查詢的 WHERE 段。要指定 WHERE 條件,可以使用以下三種格式:
string 格式 − 'name = User10'
hash 格式 − ['name' => 'User10', 'email => user10@gmail.com']
operator 格式 − ['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);
}
輸出結果如下圖所示:
哈希格式的例子
public function actionTestDb() {
$user = (new \yii\db\Query())
->select(['id', 'name', 'email'])
->from('user')
->where([
'name' => 'User5',
'email' => '[email protected]'
])
->one();
var_dump($user);
}
輸出結果如下圖所示:
運算符格式化允許定義任意條件的格式如下 -
[operator, operand1, operand2]
操作符可以是 -
and − ['and', 'id = 1', 'id = 2'] 會產生類似: id = 1 AND id = 2
between − ['between', 'id', 1, 15] 會產生類似:id BETWEEN 1 AND 15
not between − 類似 between 操作符, 但是 BETWEEN 被替換爲 NOT BETWEEN
in − ['in', 'id', [5,10,15]] 會產生類似: 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 運算符,但或用來連接 NOT LIKE 謂詞
exists − 要求一個操作數必須是 yii\db\Query 類的一個實例
not exists − 類似 exists 操作符,但是構建了一個NOT EXISTS(子查詢)的表達式
<, <=, >, >=, 或任何其他數據庫操作符: ['<', '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);
}
輸出結果如下圖所示:
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);
}
輸出結果如下圖所示:
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);
}
輸出結果如下圖所示:
limit() 和 offset() 方法定義了 LIMIT 和 OFFSET 段。
如下示例 −
public function actionTestDb() {
$users = (new \yii\db\Query())
->select(['id', 'name', 'email'])
->from('user')
->limit(5)
->offset(5)
->all();
var_dump($users);
}
輸出結果如下圖所示:
yii\db\Query 類提供了一組用於不同的目的的方法 -
all() − 返回一行爲名稱-值對的數組。
one() − 返回第一行
column() − 返回第一列
scalar() − 返回結果的第一行和第一列的標量值。
exists() − 返回指示查詢是否包含任何結果值
count() 返回COUNT查詢結果
其他聚集查詢方法 - 包括:sum($q), average($q), max($q), min($q)。$q 參數可以是列名 或 DB 表達式。