這開始介紹Zii組件之前,先簡要介紹一下Yii支持的數據源接口 IDataProvider,IDataProvider主要功能是為UI組件如 GridView,ListView等提供數據源,同時也支持數據的分頁和排序。下圖為Yii內置的三種數據源:
CActiveDataProvider 基於Active Record的數據源
CArraryDataProvider 基於數組的數據源
CSqlDataProvider 基於SQL查詢的數據源

三種Data Provider的使用大同小異:
CActiveDataProvider 基於ActiveRecord, 它通過AR的 CActiveRecord::findAll方法讀取數據庫記錄,並通過 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 基於數組,其中屬性 rawData設置原始數據,一般為數組或者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文檔:http://www.yiiframework.com/doc/api/1.1/CDataProvider