鍍金池/ 教程/ PHP/ Yii Framework 開發(fā)教程(25) 數(shù)據(jù)庫-Query Builder 示例
Yii Framework 開發(fā)教程(16) UI 組件 StarRating 示例
Yii Framework 開發(fā)教程(2) Yii Web 應用基礎
Yii Framework 開發(fā)教程(19) UI 組件 TreeView 示例
Yii Framework 開發(fā)教程(39) Zii 組件-Slider 示例
Yii Framework 開發(fā)教程(45) Zii 組件-Selectable 示例
Yii Framework 開發(fā)教程(44) Zii 組件-Resizable 示例
Yii Framework 開發(fā)教程(8) 使用 FormModel
Yii Framework 開發(fā)教程(42) Zii 組件-Draggable 示例
Yii Framework 開發(fā)教程(18) UI 組件 TextHighlighter 示例
Yii Framework 開發(fā)教程(32) Zii 組件-GridView 示例
Yii Framework 開發(fā)教程(30) Zii 組件-ListView 示例
Yii Framework 開發(fā)教程(9) UI 組件 Widget 概述
Yii Framework 開發(fā)教程(17) UI 組件 TabView 示例
Yii Framework 開發(fā)教程(24) 數(shù)據(jù)庫-DAO 示例
Yii Framework 開發(fā)教程(25) 數(shù)據(jù)庫-Query Builder 示例
Yii Framework 開發(fā)教程(21) UI 組件 自定義 Captcha 示例
Yii Framework 開發(fā)教程(38) Zii 組件-ProgressBar 示例
Yii Framework 開發(fā)教程(20) UI 組件 Captcha 示例
Yii Framework 開發(fā)教程(14) UI 組件 MaskedTextField 示例
Yii Framework 開發(fā)教程(22) UI 組件 Zii 組件簡介
Yii Framework 開發(fā)教程(31) Zii 組件-DetailView 示例
Yii Framework 開發(fā)教程(33) Zii 組件-Accordion 示例
Yii Framework 開發(fā)教程(36) Zii 組件-DatePicker 示例
Yii Framework 開發(fā)教程(6) CComponent 組件
Yii Framework 開發(fā)教程(37) Zii 組件-Dialog 示例
Yii Framework 開發(fā)教程(26) 數(shù)據(jù)庫-Active Record 示例
Yii Framework 開發(fā)教程(29) Zii組件-Menu 示例
Yii Framework 開發(fā)教程(46) Zii 組件-Sortable 示例
Yii Framework 開發(fā)教程(10) UI 組件 自定義組件
Yii Framework 開發(fā)教程(11) UI 組件 ActiveForm 示例
Yii Framework 開發(fā)教程(43) Zii 組件-Droppable 示例
Yii Framework 開發(fā)教程(27) 數(shù)據(jù)庫-關聯(lián) Active Record 示例
Yii Framework 開發(fā)教程(47) 主題 Theme 示例
Yii Framework 開發(fā)教程(48) 多國語言示例
Yii Framework 開發(fā)教程(35) Zii 組件-Button 示例
Yii Framework 開發(fā)教程(3) 為應用添加日志
Yii Framework 開發(fā)教程(23) 數(shù)據(jù)庫-概述
Yii Framework 開發(fā)教程(12) UI 組件 ClipWidget 示例
Yii Framework 開發(fā)教程(41) Zii 組件-Tabs 示例
Yii Framework 開發(fā)教程(34) Zii 組件-AutoComplete 示例
Yii Framework 開發(fā)教程(40) Zii 組件-SliderInput 示例
Yii Framework 開發(fā)教程(5) URL 管理
Yii Framework 開發(fā)教程(4) Hangman 猜單詞游戲?qū)嵗?/span>
Yii Framework 開發(fā)教程(15) UI 組件 MultiFileUpload 示例
Yii Framework 開發(fā)教程(7) 使用 CHtml 創(chuàng)建 Form
Yii Framework 開發(fā)教程(28) Data Provider 簡介
Yii Framework 開發(fā)教程(1) 第一個應用 Hello World
Yii Framework 開發(fā)教程(13) UI 組件 ContentDecorator 示例

Yii Framework 開發(fā)教程(25) 數(shù)據(jù)庫-Query Builder 示例

上一篇介紹 PHP 使用 DAO(數(shù)據(jù)庫訪問對象接口)訪問數(shù)據(jù)庫的方法,使用 DAO 需要程序員編寫 SQL 語句,對于一些復雜的 SQL 語句,Yii 提供了 Query Builder 來幫助程序員生成 SQL 語句,Query Builder 提供了一中面向?qū)ο蟮姆椒▌討B(tài)創(chuàng)建 SQL 語句,打個不十分恰當?shù)谋容^,PHP 的 DAO 和.Net 的 DAO 接口非常類型,Query builder 就有點像 LINQ 了,盡管和 LINQ 比起來功能小很多。對于一些簡單的 SQL 查詢,通常不需要借助于 Query Builder,比如上篇中的查詢 Employee 表格。

和直接使用 SQL 語句相比,使用 Query Builder 具有下面好處:

  • 支持通過程序動態(tài)創(chuàng)建比較復雜的 SQL 查詢.
  • 自動為創(chuàng)建的 SQL 語句中的表名,列表添加引號以避免和 SQL 保留的標志符產(chǎn)生沖突.
  • 指定為參數(shù)添加引號并盡可能的使用參數(shù)綁定以減小 SQL Injection 的風險。.
  • 使用 Query Builder 不直接編寫 SQL 語句,而提供了一定程度上的數(shù)據(jù)庫抽象,從而為切換數(shù)據(jù)庫類型提供了便利。

本例查詢 Chinook 的兩個表 Customer 和 Employee, 查詢 EmployeeId=4 管理的所有客戶的聯(lián)系信息。

如果使用 SQL 查詢,可以寫作:


    SELECT c.FirstName, c.LastName , c.Address,c.Email
    FROM customer c
    INNER JOIN
    employee e
    ON c.SupportRepId=e.EmployeeId
    WHERE e.EmployeeId=4

本例使用 Query Builder 創(chuàng)建 SQL 查詢,修改 SiteController 的 indexAction 方法:


    public function actionIndex()
    {

        $model = array();
        $connection=Yii::app()->db;
        $command=$connection->createCommand()
            ->select('c.FirstName, c.LastName, c.Address,c.Email')
            ->from('customer c')
            ->join('employee e','c.SupportRepId=e.EmployeeId')
            ->where('e.EmployeeId=4');

        $dataReader=$command->query();

        // each $row is an array representing a row of data
        foreach($dataReader as $row)
        {
            $customer= new DataModel();

            $customer->firstName=$row['FirstName'];
            $customer->lastName=$row['LastName'];

            $customer->address=$row['Address'];
            $customer->email=$row['Email'];

            $model[]=$customer;
        }

        $this->render('index', array(
            'model' => $model,

            ));
    }

可以看到 Query Builder 也是使用 CDbCommand , CDbCommand 提供了如下查詢數(shù)據(jù)的方法:

此外數(shù)據(jù)定義方法:

可以看到 CDbCommand 支持的方法基本上和 SQL 語句的關鍵字一一對應,使不使用 Query Builder 全憑個人愛好,對應簡單的 SQL 語句可以直接使用 SQL 語句,對于較復雜的查詢可以借助于 Query Builder。

本例顯示結(jié)果:

http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/25.1.jpg" alt="picture25.1" />

本例下載