鍍金池/ 教程/ PHP/ Yii Framework 開發(fā)教程(28) Data Provider 簡介
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ā)教程(28) Data Provider 簡介

這開始介紹 Zii 組件之前,先簡要介紹一下 Yii 支持的數(shù)據(jù)源接口 IDataProvider,IDataProvider 主要功能是為 UI 組件如 GridView,ListView 等提供數(shù)據(jù)源,同時也支持數(shù)據(jù)的分頁和排序。下圖為 Yii 內(nèi)置的三種數(shù)據(jù)源:

  • CActiveDataProvider 基于 Active Record 的數(shù)據(jù)源
  • CArraryDataProvider 基于數(shù)組的數(shù)據(jù)源
  • CSqlDataProvider 基于 SQL 查詢的數(shù)據(jù)源

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

三種 Data Provider 的使用大同小異:

CActiveDataProvider 基于 ActiveRecord, 它通過 AR 的 CActiveRecord::findAll 方法讀取數(shù)據(jù)庫記錄,并通過 criteria 屬性設置查詢條件。\

如:


    $dataProvider=new CActiveDataProvider('Post', array(
        'criteria'=>array(
            'condition'=>'status=1',
            'order'=>'create_time DESC',
            'with'=>array('author'),
        ),
        'pagination'=>array(
        'pageSize'=>20,
        ),
    ));
    // $dataProvider->getData() will return a list of Post objects

CArrayDataProvider 基于數(shù)組,其中屬性 rawData 設置原始數(shù)據(jù),一般為數(shù)組或者 DAO 查詢結果,如:


    $rawData=Yii::app()->db->createCommand('SELECT * FROM tbl_user')->queryAll();
    // or using: $rawData=User::model()->findAll();
    $dataProvider=new CArrayDataProvider($rawData, array(
        'id'=>'user',
        'sort'=>array(
            'attributes'=>array(
                 'id', 'username', 'email',
            ),
        ),
        'pagination'=>array(
            'pageSize'=>10,
        ),
    ));
    // $dataProvider->getData() will return a list of arrays.

CSqlDataProvider 基于 SQL查詢,通過設置 sql 語句來配置,比如:


    $count=Yii::app()->db->createCommand('SELECT COUNT(*) FROM tbl_user')->queryScalar();
    $sql='SELECT * FROM tbl_user';
    $dataProvider=new CSqlDataProvider($sql, array(
        'totalItemCount'=>$count,
        'sort'=>array(
            'attributes'=>array(
                  'id', 'username', 'email',
            ),
        ),
        'pagination'=>array(
        'pageSize'=>10,
        ),
    ));
    // $dataProvider->getData() will return a list of arrays.

關于 DataProvider 詳細文檔可以參見 Yii 文檔