Yii Query Builder 提供面向對象方式構建 SQL,自動處理表/列名引用、參數綁定,防止 SQL 注入,簡化跨數據庫遷移。基於 CDbCommand 實現,支持鏈式調用與屬性賦值兩種語法。
$user = Yii::app()->db->createCommand()
->select('id, username, profile')
->from('tbl_user u')
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow();
不可混合使用純 SQL 與 Query Builder:createCommand('SELECT * FROM tbl_user') 後調用 where() 不會生效。必須從空命令開始構建。
| 類別 | 方法 | 說明 |
|---|---|---|
| 數據檢索 | select()/selectDistinct() | 指定 SELECT 列,支持字符串/數組,自動引用 |
from() | 指定 FROM 表,支持別名、Schema 前綴 | |
where()/andWhere()/orWhere() | WHERE 條件,支持字符串、數組操作符(and/or/in/like 等) | |
join()/leftJoin()/rightJoin()/crossJoin()/naturalJoin() | 各類 JOIN,每次調用追加片段 | |
group()/having() | GROUP BY / HAVING | |
order() | ORDER BY,支持 ASC/DESC | |
limit()/offset() | LIMIT / OFFSET,不支持的 DB 自動重寫 | |
union() | UNION 合併查詢 | |
| 執行與獲取 | queryRow()/queryAll()/queryScalar()/queryColumn() | 執行並獲取單行/所有行/單值/單列 |
getText() | 獲取生成的純 SQL 字符串 | |
params | 獲取綁定參數數組 | |
| 數據操作 | insert($table, $columns) | 構建並執行 INSERT,自動參數綁定 |
update($table, $columns, $conditions, $params) | 構建並執行 UPDATE | |
delete($table, $conditions, $params) | 構建並執行 DELETE | |
| 架構操作 | createTable()/renameTable()/dropTable()/truncateTable() | 建表/重命名/刪表/清空表 |
addColumn()/dropColumn()/renameColumn()/alterColumn() | 列增刪改 | |
addForeignKey()/dropForeignKey() | 外鍵增刪 | |
createIndex()/dropIndex() | 索引增刪 |
pk → int(11) NOT NULL AUTO_INCREMENT PRIMARY KEYstring → varchar(255)text → textinteger → int(11)boolean → tinyint(1)money → decimal(19,4) (v1.1.8+)$command->select = array('id', 'username'); // 等同 $command->select(array('id','username'));
$row = Yii::app()->db->createCommand(array(
'select' => array('id', 'username'),
'from' => 'tbl_user',
'where' => 'id=:id',
'params' => array(':id'=>1),
))->queryRow();
$command = Yii::app()->db->createCommand();
$users = $command->select('*')->from('tbl_users')->queryAll();
$command->reset(); // 清理上一條查詢
$posts = $command->select('*')->from('tbl_posts')->queryAll();