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