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版了,并且 ...
随机推荐
- Python中的日志处理
在日常项目中,总是需要记录下一些细小信息或者错误码.错误信息的,这个时候就需要进行日志的操作.python中用于日志创建.设置和记录等功能的模块,就是logging了,下面是对其基本使用方法的介绍: ...
- elk服务器和运维服务器的IPTABLES
--运维服务器 iptables -P INPUT ACCEPT iptables -F iptables -X iptables -Z iptables -A INPUT -i lo -j ACCE ...
- MVC Filter
一.Filter在MVC生命周期中的位置 1.IIS中传递请求到程序2.MVC根据Routing来选择由哪个Controller/Action来处理3.Controller调用Model(业务逻辑)来 ...
- combination sum(I, II, III, IV)
II 简单dfs vector<vector<int>> combinationSum2(vector<int>& candidates, int targ ...
- 【译】理解JavaScript中的柯里化
译文开始 函数式编程是一种编程风格,这种编程风格就是试图将传递函数作为参数(即将作为回调函数)和返回一个函数,但没有函数副作用(函数副作用即会改变程序的状态). 有很多语言采用这种编程风格,其中包括J ...
- Web前端开发:Sublime Text 常用插件
在安装这些插件之前,确保你已经安装了Package Control. 安装Package Control方法: 通过菜单栏View->Show Console 或者快捷键Ctrl+` 打 ...
- nginx 正则及rewrite常用规则实例
一.正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配二.文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* ...
- Factorial Trailing Zeroes Add to List
https://leetcode.com/problems/factorial-trailing-zeroes/#/description 想到了要找2x5:也想到了只要找5,剩下的2 管够.也想到了 ...
- 分布式一致性算法——paxos
一.什么是paxos算法 Paxos 算法是分布式一致性算法用来解决一个分布式系统如何就某个值(决议)达成一致的问题. 人们在理解paxos算法是会遇到一些困境,那么接下来,我们带着以下几个问题来学习 ...
- 【转】 诡异的ORA-02289: sequence does not exist
原文地址:http://blog.itpub.net/20801486/viewspace-695651/ 今天被开发人员告知在应用用户下无法查询自己创建的sequence的nextval值.当执行s ...