
- Yii 教程
- Yii - 首頁
- Yii - 概述
- Yii - 安裝
- Yii - 建立頁面
- Yii - 應用程式結構
- Yii - 入口指令碼
- Yii - 控制器
- Yii - 使用控制器
- Yii - 使用操作
- Yii - 模型
- Yii - 小部件
- Yii - 模組
- Yii - 檢視
- Yii - 佈局
- Yii - 資源
- Yii - 資源轉換
- Yii - 擴充套件
- Yii - 建立擴充套件
- Yii - HTTP 請求
- Yii - 響應
- Yii - URL 格式
- Yii - URL 路由
- Yii - URL 規則
- Yii - HTML 表單
- Yii - 驗證
- Yii - 特設驗證
- Yii - AJAX 驗證
- Yii - 會話
- Yii - 使用快閃記憶體資料
- Yii - Cookie
- Yii - 使用 Cookie
- Yii - 檔案上傳
- Yii - 格式化
- Yii - 分頁
- Yii - 排序
- Yii - 屬性
- Yii - 資料提供者
- Yii - 資料小部件
- Yii - ListView 小部件
- Yii - GridView 小部件
- Yii - 事件
- Yii - 建立事件
- Yii - 行為
- Yii - 建立行為
- Yii - 配置
- Yii - 依賴注入
- Yii - 資料庫訪問
- Yii - 資料訪問物件
- Yii - 查詢構建器
- Yii - 活動記錄
- Yii - 資料庫遷移
- Yii - 主題
- Yii - RESTful API
- Yii - RESTful API 實戰
- Yii - 欄位
- Yii - 測試
- Yii - 快取
- Yii - 片段快取
- Yii - 別名
- Yii - 日誌記錄
- Yii - 錯誤處理
- Yii - 身份驗證
- Yii - 授權
- Yii - 本地化
- Yii - Gii
- Gii – 建立模型
- Gii – 生成控制器
- Gii – 生成模組
- Yii 有用資源
- Yii - 快速指南
- Yii - 有用資源
- Yii - 討論
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,您將看到以下輸出。

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); }
輸出如下。

雜湊格式示例
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); }
輸出如下。

運算子格式允許您以下列格式定義任意條件:
[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); }
輸出如下。

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 表示式。