yii2 数据提供者 dataProvider
数据提供者 dataProvider

$dataProvider = new ActiveDataProvider([
'query' => $query, // 如何来取得数据
'pagination' => ['pageSize'=>5], // pagination 用于分页
'sort' => [ // sort 用于排序
'defaultOrder' => [
'id' => SORT_DESC, // defaultOrder 指定默认排序字段
],
'attributes' => ['id','title'], // attribute 指定那几个字段可以用来排序
],
]);

如果需要打印原生sql,使用如下方法:
echo $query ->createCommand()->getRawSql();
$dataProvider->query->each() //获取 $dataProvider 所有记录;
$dataProvider->getModels() // 获取当前页的数据,以数组的方式返回
由于 $dataProvider->getModels() 获取的数据是当前页的,如果在导出的时候需要导出所有记录而不是当前页,且又使用的是 SqlDataProvider ,那么就可以在控制器文件中在重新设置一下分页,将值设置的特别大,就可以模拟为不分页了。
use yii\db\Pagination;
$dataProvider = $searchModel->search(\Yii::$app->request->getQueryParams());
$dataProvider->setPagination(new Pagination([
'defaultPageSize' => 10000,
'pageSizeLimit' => [1, 10000]
]));
二、Yii的数据提供者类都包含:
- yii\data\ActiveDataProvider:使用 yii\db\Query 或者 yii\db\ActiveQuery 从数据库查询数据并且以数组项的方式或者 Active Record 实例的方式返回。
- yii\data\SqlDataProvider:执行一段SQL语句并且将数据库数据作为数组返回。
- yii\data\ArrayDataProvider:将一个大的数组依据分页和排序规格返回一部分数据。
如果需要使用 UNION 联合多张表查询,且查询中还可能包含 关联查询(join)的时候,使用 SqlDataProvider 来实现如下:
<?php
namespace organize\models; use Yii;
use yii\base\Model;
use standard\models\Country;
use organize\models\User;
use yii\db\Expression;
use yii\data\SqlDataProvider; class CountrySearch extends Country
{
/**
* @inheritdoc
*/
public function rules()
{
return [
[['country_id', 'created_at', 'updated_at', 'is_delete'], 'integer'],
[[ 'country_name','remarks'], 'safe'],
];
} /**
* @inheritdoc
*/
public function scenarios()
{
// bypass scenarios() implementation in the parent class
return Model::scenarios();
} /**
* Creates data provider instance with search query applied
*
* @param array $params
*
* @return SqlDataProvider
*/
public function search($params)
{
$query = self::find()
->select(['country_id AS unique_id','country_name','created_at'])
->addSelect(new Expression("'country' AS table_name")); // 查询一个常量 $this->load($params); // grid filtering conditions
$query->andFilterWhere([
'country_id' => $this->country_id,
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
'is_delete' => $this->is_delete,
]); $query->andFilterWhere(['like', 'country_name', $this->country_name])
->andFilterWhere(['like', 'remarks', $this->remarks]);
$query->from('standard.country'); // 有多个库名的时候使用 $userQuery = User::find();
$userQuery->innerJoin('organize.org_auth_assignment','org_user.id=org_auth_assignment.user_id')
->select(['id AS unique_id','realname','sex','dept_id','mobile','email','qq','org_auth_assignment.name as role','org_user.created_at'])
->addSelect(new Expression("'org_user' AS table_name")); $userQuery->andFilterWhere(['like', 'realname', $this->realname])
->andFilterWhere(['like', 'sex', $this->sex])
->andFilterWhere(['=', 'org_auth_assignment.name', $this->role])
->andFilterWhere(['like', 'mobile', $this->mobile])
->andFilterWhere(['like', 'email', $this->email])
->andFilterWhere(['like', 'qq', $this->qq]);
$userQuery->from('organize.org_user'); $query->union($userQuery,true); // 联合查询 $sql = $query->createCommand()->rawSql; // 生成一条不带分页的 sql
$dataProvider = new SqlDataProvider([
'sql' => $sql,
'totalCount' => $query->count(),
'sort' => false,
'pagination' => [
'pageSize' => 20,
],
]); if (!$this->validate()) {
// uncomment the following line if you do not want to return any records when validation fails
// $query->where('0=1');
return $dataProvider;
} //echo $query->createCommand()->getRawSql();
return $dataProvider;
}
}
// 最后的 $dataProvider 渲染到页面后,用 ArrayHelper() 即可获取对应的值
关于 $dataProvider 更详细的内容,请参考官网:http://www.yiichina.com/doc/guide/2.0/output-data-providers
注:本文为作者(44106-kangaroo) 看完魏羲教你学Yii2.0 视频后所记,如有转载请注明出处:http://www.cnblogs.com/chrdai/p/7966640.html
yii2 数据提供者 dataProvider的更多相关文章
- Yii2 数据搜索类 PostSearch
数据搜索类 PostSearch /** * @Purpose : 添加 authorName 属性,使属性和搜索表单相对应 * @return array */ public function at ...
- Android开发 ---ContentProvider数据提供者,Activity和Service就是上下文对象,短信监听器,内容观察者
1.activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayou ...
- Yii2 数据操作Query Builder
转载地址: http://blog.csdn.net/hzqghost/article/details/44117081 Yii2 数据操作Query Builder 分类: Yii22015-03- ...
- Yii2 数据查询
转载来自: http://www.yiichina.com/tutorial/95 数据查询 User::find()->all(); 此方法返回所有数据: User::findOne($id) ...
- yii2数据条件查询-where专题
条件查询 $customers = Customer::find()->where($cond)->all(); $cond就是我们所谓的条件,条件的写法也根据查询数据的不同存在差异,那么 ...
- yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法
作者:白狼 出处:http://www.manks.top/article/yii2_excel_extension 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
- yii2 数据验证
控制器层 <?php namespace frontend\controllers; use Yii; use frontend\models\FormsModel; use yii\web\U ...
- Yii2 数据操作DAO
参考: http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.dao http://blog.csdn.net/hzqghost/artic ...
- Yii2数据接口
写接口之前先确认那你已经安装了Yii2的basic版或者advanced版,如果还没有,赶快去看这篇文章:composer安装Yii2. 现在默认你已经安装了basic版或者advanced版了,并且 ...
随机推荐
- GAN-生成对抗网络原理
最近一直在看GAN,我一直认为只有把博客看了一遍,然后再敲一遍.这样才会有深刻的感悟. GAN(生成式对抗网络)(GAN, Generative Adversarial Networks )是一种深度 ...
- js中的原型
一:原型属性 函数本身也是一个包含了方法和属性的对象. 定义一个函数foo(),访问其他对象一样访问该函数的属性: function foo(a, b) { return a * b; } foo.l ...
- ES优化总结
ES优化总结(特别是在bulk大量数据到ES的时候) https://blog.csdn.net/chenxun_2010/article/details/78602795 将 ELASTICSEAR ...
- Caused by: java.lang.ClassNotFoundException: Didn't find class "io.grpc.helloworldexample.HelloworldActivity" on path: DexPathList
FAQ: Android app 编译好后安装到手机,运行时闪退,报如下错误: java.lang.RuntimeException: Unable to instantiate activity ...
- C#学习-属性是对字段的扩展
属性是对字段的扩展. 根据面向对象语言的封装思想,字段最好设为private,因为这样可以防止客户端直接对字段进行篡改,从而保证了内部成员的完整性. 于是为了访问类中的私有字段,C#提供了属性这种机制 ...
- GIT 数据结构
Git doesn’t think of or store its data this way. Instead, Git thinks of its data more like a series ...
- [转] getBoundingClientRect判断元素是否可见
getBoundingClientRect介绍 getBoundingClientRect获取元素位置 getBoundingClientRect用于获得页面中某个元素的左,上,右和下分别相对浏览器视 ...
- kafka其中一台节点坏掉的迁移或者数据迁移
kafka版本:适用于目前2.0以下 第一步: 假如有一个topic叫做test,当前topic的详情是这样的: [cdh@cdh1 kafka_2.11-1.0.1]$ bin/kafka-topi ...
- Hadoop| MapReduce01 概述
概述 分布式运算程序: 优点:易于编程:良好扩展性:高容错性:适合PB级以上海量数据的离线处理: 缺点:不擅长实时计算:不擅长流式计算:不擅长DAG有向图计算: 核心思想: 1)分布式的运算程序往往需 ...
- poj-1287 Networking(Prim)
题目链接:http://poj.org/problem?id=1287 题目描述: 请先参考关于prim算法求最小生成树的讲解博客:https://www.cnblogs.com/LJHAHA/p/1 ...