Yii2-GridView 中让关联字段带搜索和排序功能示例


Posted in PHP onJanuary 21, 2017

情境要求:

要在订单(Order)视图的gridview中显示出客户(Customer)姓名,并使其具有与其它字段相同的排序和搜索功能。

数据库结构

订单表order含有字段customer_id 与 客户表customer的id字段关联

首先确保在Order Model中包含以下代码:

public function getCustomer()
{
  return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
}

用gii会自动生成此代码;

第一步:

在OrderSearch添加一个$customer_name变量

class OrderSearch extends Order
{
  public $customer_name; //<=====就是加在这里
}

第二步:

修改OrderSearch中的search函数

public function search($params)
{
  $query = Order::find();
  $query->joinWith(['customer']);<=====加入这句
  $dataProvider = new ActiveDataProvider([
    'query' => $query,
  ]);
  
  $dataProvider->setSort([
    'attributes' => [
      /* 其它字段不要动 */  
      /* 下面这段是加入的 */
      /*=============*/
      'customer_name' => [
        'asc' => ['customer.customer_name' => SORT_ASC],
        'desc' => ['customer.customer_name' => SORT_DESC],
        'label' => 'Customer Name'
      ],
      /*=============*/
    ]
  ]); 

  if (!($this->load($params) && $this->validate())) {
    return $dataProvider;
  }

  $query->andFilterWhere([
    'id' => $this->id,
    'user_id' => $this->user_id,
    'customer_id' => $this->customer_id,
    'order_time' => $this->order_time,
    'pay_time' => $this->pay_time,
  ]);

  $query->andFilterWhere(['like', 'status', $this->status]);
   $query->andFilterWhere(['like', 'customer.customer_name', $this->customer_name]) ;//<=====加入这句
  
  return $dataProvider;
}

第三步:

修改order/index视图的gridview

<?= GridView::widget([
  'dataProvider' => $dataProvider,
  'filterModel' => $searchModel,
  'columns' => [
    ['class' => 'yii\grid\SerialColumn'],
    'id',
    'customer_id', 
    'status',
    ['label'=>'客户', 'attribute' => 'customer_name', 'value' => 'customer.customer_name' ],//<=====加入这句
    ['class' => 'yii\grid\ActionColumn'],
  ],
]); ?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
Sep 30 PHP
php 图片上添加透明度渐变的效果
Jun 29 PHP
PHP 压缩文件夹的类代码
Nov 05 PHP
PHP--用万网的接口实现域名查询功能
Dec 13 PHP
PHP json_decode函数详细解析
Feb 17 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
May 04 PHP
浅析php创建者模式
Nov 25 PHP
PHP中的switch语句的用法实例详解
Oct 21 PHP
Yii2中datetime类的使用
Dec 17 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 PHP
PHP三种方式实现链式操作详解
Jan 21 #PHP
PHP将字符串首字母大小写转换的实例
Jan 21 #PHP
thinkphp 手机号和用户名同时登录
Jan 20 #PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
Jan 20 #PHP
php curl常用的5个经典例子
Jan 20 #PHP
php技巧小结【推荐】
Jan 19 #PHP
Yii CDBCriteria常用方法实例小结
Jan 19 #PHP
You might like
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
Git命令之分支详解
2021/03/02 PHP
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
深入理解JavaScript 闭包究竟是什么
2013/04/12 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
javascript内存管理详细解析
2013/11/11 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
详解JavaScript的Date对象(制作简易钟表)
2020/04/07 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
React学习笔记之事件处理(二)
2017/07/02 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
js数据类型检测总结
2018/08/05 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
如何写python的配置文件
2020/06/07 Python
python操作链表的示例代码
2020/09/27 Python
python-地图可视化组件folium的操作
2020/12/14 Python
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
武汉世纪畅想数字传播有限公司.NET笔试题
2014/07/22 面试题
个人简历的自荐信
2013/10/23 职场文书
大学生标准推荐信范文
2013/11/25 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
4S店收银员岗位职责
2015/04/07 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
[有人@你]你有一封绿色倡议书,请查收!
2019/07/18 职场文书