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 相关文章推荐
PHP开发文件系统实例讲解
Oct 09 PHP
对javascript和select部件的结合运用
Oct 09 PHP
php curl基本操作详解
Jul 23 PHP
浅析PHP原理之变量(Variables inside PHP)
Aug 09 PHP
XAMPP安装与使用方法详细解析
Nov 27 PHP
memcache命令启动参数中文解释
Jan 13 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
用php来限制每个ip每天浏览页面数量的实现思路
Feb 24 PHP
PHP基于MySQL数据库实现对象持久层的方法
Jun 17 PHP
PHP执行shell脚本运行程序不产生core文件的方法
Dec 28 PHP
PHP实现的堆排序算法详解
Aug 17 PHP
Laravel服务容器绑定的几种方法总结
Jun 14 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
dedecms系统常用术语汇总
2007/04/03 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
php格式化时间戳
2016/12/17 PHP
Web层改进II-用xmlhttp 无声息提交复杂表单
2007/01/22 Javascript
JS动画效果代码3
2008/04/03 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
2011/07/26 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
基于jquery实现等比缩放图片
2014/12/03 Javascript
JS获得选取checkbox整行数据的方法
2015/01/28 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
JavaScript包装对象使用详解
2015/07/09 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
Python标准库内置函数complex介绍
2014/11/25 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
Python实现常见的几种加密算法(MD5,SHA-1,HMAC,DES/AES,RSA和ECC)
2020/05/09 Python
python支持多继承吗
2020/06/19 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
物流仓储实习自我鉴定
2013/09/25 职场文书
商场端午节活动方案
2014/01/29 职场文书
低碳生活倡议书
2014/04/14 职场文书
环保志愿者活动总结
2014/06/27 职场文书
优秀家长自荐材料
2014/08/26 职场文书
python基础之停用词过滤详解
2021/04/21 Python
goland 恢复已更改文件的操作
2021/04/28 Golang