這開始介紹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
查看全套教程:http://www.bianceng.cn/webkf/PHP/201301/35265.htm