数据提供者 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的数据提供者类都包含:

如果需要使用 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的更多相关文章

  1. Yii2 数据搜索类 PostSearch

    数据搜索类 PostSearch /** * @Purpose : 添加 authorName 属性,使属性和搜索表单相对应 * @return array */ public function at ...

  2. Android开发 ---ContentProvider数据提供者,Activity和Service就是上下文对象,短信监听器,内容观察者

    1.activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayou ...

  3. Yii2 数据操作Query Builder

    转载地址: http://blog.csdn.net/hzqghost/article/details/44117081 Yii2 数据操作Query Builder 分类: Yii22015-03- ...

  4. Yii2 数据查询

    转载来自: http://www.yiichina.com/tutorial/95 数据查询 User::find()->all(); 此方法返回所有数据: User::findOne($id) ...

  5. yii2数据条件查询-where专题

    条件查询 $customers = Customer::find()->where($cond)->all(); $cond就是我们所谓的条件,条件的写法也根据查询数据的不同存在差异,那么 ...

  6. yii2 数据导出 excel导出以及导出数据时列超过26列时解决办法

    作者:白狼 出处:http://www.manks.top/article/yii2_excel_extension​ 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...

  7. yii2 数据验证

    控制器层 <?php namespace frontend\controllers; use Yii; use frontend\models\FormsModel; use yii\web\U ...

  8. Yii2 数据操作DAO

    参考: http://www.yiiframework.com/doc/guide/1.1/zh_cn/database.dao http://blog.csdn.net/hzqghost/artic ...

  9. Yii2数据接口

    写接口之前先确认那你已经安装了Yii2的basic版或者advanced版,如果还没有,赶快去看这篇文章:composer安装Yii2. 现在默认你已经安装了basic版或者advanced版了,并且 ...

随机推荐

  1. Python中的日志处理

    在日常项目中,总是需要记录下一些细小信息或者错误码.错误信息的,这个时候就需要进行日志的操作.python中用于日志创建.设置和记录等功能的模块,就是logging了,下面是对其基本使用方法的介绍: ...

  2. elk服务器和运维服务器的IPTABLES

    --运维服务器 iptables -P INPUT ACCEPT iptables -F iptables -X iptables -Z iptables -A INPUT -i lo -j ACCE ...

  3. MVC Filter

    一.Filter在MVC生命周期中的位置 1.IIS中传递请求到程序2.MVC根据Routing来选择由哪个Controller/Action来处理3.Controller调用Model(业务逻辑)来 ...

  4. combination sum(I, II, III, IV)

    II 简单dfs vector<vector<int>> combinationSum2(vector<int>& candidates, int targ ...

  5. 【译】理解JavaScript中的柯里化

    译文开始 函数式编程是一种编程风格,这种编程风格就是试图将传递函数作为参数(即将作为回调函数)和返回一个函数,但没有函数副作用(函数副作用即会改变程序的状态). 有很多语言采用这种编程风格,其中包括J ...

  6. Web前端开发:Sublime Text 常用插件

    在安装这些插件之前,确保你已经安装了Package Control.   安装Package Control方法:   通过菜单栏View->Show Console 或者快捷键Ctrl+` 打 ...

  7. nginx 正则及rewrite常用规则实例

    一.正则表达式匹配,其中:* ~ 为区分大小写匹配* ~* 为不区分大小写匹配* !~和!~*分别为区分大小写不匹配及不区分大小写不匹配二.文件及目录匹配,其中:* -f和!-f用来判断是否存在文件* ...

  8. Factorial Trailing Zeroes Add to List

    https://leetcode.com/problems/factorial-trailing-zeroes/#/description 想到了要找2x5:也想到了只要找5,剩下的2 管够.也想到了 ...

  9. 分布式一致性算法——paxos

    一.什么是paxos算法 Paxos 算法是分布式一致性算法用来解决一个分布式系统如何就某个值(决议)达成一致的问题. 人们在理解paxos算法是会遇到一些困境,那么接下来,我们带着以下几个问题来学习 ...

  10. 【转】 诡异的ORA-02289: sequence does not exist

    原文地址:http://blog.itpub.net/20801486/viewspace-695651/ 今天被开发人员告知在应用用户下无法查询自己创建的sequence的nextval值.当执行s ...