数据提供者 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. JavaScript编程语言

    JavaScript编程语言 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应 ...

  2. java编译通过,为什么运行却提示找不到或无法加载主类?

    java编译通过,为什么运行却提示找不到或无法加载主类? https://www.zhihu.com/question/36537093 这边提供一个关于程序中含有package关键字,使用“终端”运 ...

  3. vi/vim键盘对应图

    来源:http://www.runoob.com/linux/linux-vim.html

  4. nginx做代理离线下载插件

    一.背景 被安装的服务器不能上网,无法下载插件,一个插件都还好,但是遇到插件依赖很强的需要几十个插件的依赖,这样就很麻烦. 二.环境 192.168.182.155     安装nginx     能 ...

  5. 使用link rel="shortcut icon"为网页标题加图标

    <title>会员卡券</title> <link rel="shortcut icon" href="http://GT/img/favi ...

  6. HDU2449 Gauss Elimination 高斯消元 高精度 (C++ AC代码)

    原文链接https://www.cnblogs.com/zhouzhendong/p/HDU2449.html 题目传送门 - HDU2449 题意 高精度高斯消元. 输入 $n$ 个 $n$ 元方程 ...

  7. Codechef EDGEST 树套树 树状数组 线段树 LCA 卡常

    原文链接http://www.cnblogs.com/zhouzhendong/p/9016579.html 题目传送门 - Codechef EDGEST 题意 给定相同点集上的两棵生成树$T_1$ ...

  8. BigDecimal的引入和概述

    [代码] System.out.println(0.09 + 0.01); System.out.println(0.1 - 0.32); System.out.println(1.015 * 100 ...

  9. EditPlus文本库编辑说明

    EditPlus3 “编辑”命令(素材文本组合框弹出菜单)使用此命令载入当前的素材文本库文件(扩展名为“.CTL”)到编辑器中并直接编辑它.素材文本库文件必须按预定义语法编写.该语法非常简单.最快的方 ...

  10. ARM驱动:SEC S3C2410X Test B/D USB驱动 安装

    s3c2410x驱动是一款非常好用的usb驱动程序,win7 64位下mini2440 USB下载驱动安装,解决win7下安装SEC S3C2410X Test B/D 驱动出现叹号的问题.如果你开始 ...