今天来记录下yii2 的数据提供器,嗯,主要的流程呢,还是以代码说话吧
活动数据提供器
这里呢,我们会用到 ActiveDataProvider 这个类,传到数组元素呢,可以是查询条件,也可以包含分页信息
1 /* 方法1 */ 2 public function actionShow() 3 { 4 $provider = new ActiveDataProvider([ 5 'query' => Country::find(), 6 'pagination' => [ 7 'pageSize' => 4, 8 ], 9 ]); 10 $data = $provider->getModels(); 11 var_dump($data); 12 } 13 /* 方法2: 活动数据提取器的使用 */ 14 public function actionActiveData() 15 { 16 $query = new Query(); 17 $provider = new ActiveDataProvider([ 18 'query' => $query -> from('country'), 19 'pagination' => [ 20 'pageSize' => 5 21 ] 22 ]); 23 $data = $provider->getModels(); 24 var_dump( $data ); 25 }
数组数据提供器
这个数据提供器,用到的 是 ArrayDataProvider 类
/* 数组数据提供器 */ public function actionArrayData() { $query = new Query(); $provider = new ArrayDataProvider([ 'allModels' => $query -> from('country')->all(), 'sort' => [ 'attributes' => ['code' , 'name'] ], 'pagination' => [ 'pageSize' => 5 ] ]); $data = $provider->getModels(); print_r($data); }
sql 数据提供器
在里用到到数据提供器类呢,就是 SqlDataProvider 类,里面的参数,见代码
1 /* sql 数据提供器的使用 */ 2 public function actionSqlData() 3 { 4 $count = \Yii::$app->db->createCommand(' 5 select count(*) from country where code=:code 6 ' ,[':code' => 'US'])->queryScalar(); 7 $provider = new SqlDataProvider([ 8 'sql' => " select * from country where code=:code" , #sql 语句 9 'params'=> [':code' => 'US'], #查询条件对应的值 和 sql 语句中的 :code 对应 10 'totalCount'=>$count , #这里是数据总数 11 'sort' => [ #这里就是在排序了 12 'attributes' => [ 13 'code', 14 ] 15 ], 16 'pagination' => [ #分页信息 17 'pageSize' => 5 18 ] 19 ]); 20 $data = $provider-> getModels(); 21 var_dump($data); 22 }