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 相关文章推荐
超强分页类2.0发布,支持自定义风格,默认4种显示模式
Jan 02 PHP
浅析php变量作用域的一些问题
Aug 08 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
PHP+iFrame实现页面无需刷新的异步文件上传
Sep 16 PHP
学习php开源项目的源码指南
Dec 21 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
关于PHP转换超过2038年日期出错的问题解决
Jun 28 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
Apr 30 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
PHP设计模式之策略模式原理与用法实例分析
Apr 04 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 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
php preg_match_all结合str_replace替换内容中所有img
2008/10/11 PHP
php 求质素(素数) 的实现代码
2011/04/12 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
2013/01/13 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
mac os快速切换多个PHP版本的方法
2017/03/07 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
Draggable Elements 元素拖拽功能实现代码
2011/03/30 Javascript
jQuery1.6 正式版发布并提供下载
2011/05/05 Javascript
基于jQuery仿淘宝产品图片放大镜特效
2020/10/19 Javascript
简单谈谈json跨域
2016/03/13 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
完美解决IE不支持Data.parse()的问题
2016/11/24 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
JavaScript 判断iPhone X Series机型的方法
2019/01/28 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
python实现监控windows服务并自动启动服务示例
2014/04/17 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
Python Scapy随心所欲研究TCP协议栈
2018/11/20 Python
python同义词替换的实现(jieba分词)
2020/01/21 Python
html5中地理位置定位api接口开发应用小结
2013/01/04 HTML / CSS
道路交通安全实施方案
2014/03/12 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
给老师的保证书怎么写
2015/05/09 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
MySQL 全文索引使用指南
2021/05/25 MySQL
Python编程中Python与GIL互斥锁关系作用分析
2021/09/15 Python
vue组件vue-esign实现电子签名
2022/04/21 Vue.js