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 相关文章推荐
使用Apache的rewrite技术
Jun 22 PHP
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 PHP
用PHP实现的随机广告显示代码
Jun 14 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
Apr 20 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
PHP调用Linux的命令行执行文件压缩命令
Jan 27 PHP
Joomla数据库操作之JFactory::getDBO用法
May 05 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
May 18 PHP
深入理解PHP JSON数组与对象
Jul 19 PHP
php获取客户端IP及URL的方法示例
Feb 03 PHP
PHP实现对xml的增删改查操作案例分析
May 19 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
Aug 21 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的控制语句
2006/10/09 PHP
php定界符
2014/06/19 PHP
php命令行用法入门实例教程
2014/10/27 PHP
Codeigniter的dom类用法实例
2015/06/26 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
Prototype Object对象 学习
2009/07/12 Javascript
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
2011/08/23 Javascript
Javascript Throttle &amp; Debounce应用介绍
2013/03/19 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
requireJS使用指南
2016/04/27 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
2016/09/17 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
解决jquery有正确返回值但不执行success函数的问题
2018/08/20 jQuery
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
JS实现点击发送验证码 xx秒后重新发送功能
2019/07/30 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
JS实现简易计算器
2020/02/14 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
小结Python用fork来创建子进程注意事项
2014/07/03 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
Windows下pycharm安装第三方库失败(通用解决方案)
2020/09/17 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
中学生自我鉴定
2014/02/04 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
自荐信格式模板
2015/03/27 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
python pyhs2 的安装操作
2021/04/07 Python
浅谈MySQL中的六种日志
2022/03/23 MySQL