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 header()函数使用说明
Jul 10 PHP
PHP+Mysql日期时间如何转换(UNIX时间戳和格式化日期)
Jul 15 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
Dec 19 PHP
php递归创建目录的方法
Feb 02 PHP
PHP实现简单实用的验证码类
Jul 29 PHP
浅谈PHP正则中的捕获组与非捕获组
Jul 18 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 PHP
PHP实现ASCII码与字符串相互转换的方法
Apr 29 PHP
PHP+ajax实现二级联动菜单功能示例
Aug 10 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
PHP strripos函数用法总结
Feb 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利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
详解python调度框架APScheduler使用
2017/03/28 Python
用python实现对比两张图片的不同
2018/02/05 Python
django从请求到响应的过程深入讲解
2018/08/01 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
python区块及区块链的开发详解
2019/07/03 Python
Django 反向生成url实例详解
2019/07/30 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
应届大学生的推荐信
2013/11/20 职场文书
计算机应届毕业生自荐信范文
2014/02/23 职场文书
党日活动总结
2014/05/07 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
幼儿园八一建军节活动方案
2014/08/27 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
MySQL infobright的安装步骤
2021/04/07 MySQL
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers