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 01 PHP
fgetcvs在linux的问题
Jan 15 PHP
PHP笔记之:日期函数的使用介绍
Apr 24 PHP
PHP实现全角字符转为半角方法汇总
Jul 09 PHP
适用于初学者的简易PHP文件上传类
Oct 29 PHP
php实现倒计时效果
Dec 19 PHP
thinkPHP模板中函数的使用方法示例
Nov 30 PHP
PHP完全二叉树定义与实现方法示例
Oct 09 PHP
Ajax+PHP实现的模拟进度条功能示例
Feb 11 PHP
php 使用expat方式解析xml文件操作示例
Nov 26 PHP
php使用fputcsv实现大数据的导出操作详解
Feb 27 PHP
PHP与Web页面的交互示例详解二
Aug 04 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
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
php不允许用户提交空表单(php空值判断)
2013/11/12 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
jQuery Ajax()方法使用指南
2014/11/19 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
WebView启动支付宝客户端支付失败的问题小结
2017/01/11 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
15 分钟掌握vue-next响应式原理
2019/10/13 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
零基础写python爬虫之神器正则表达式
2014/11/06 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
Python socket模块ftp传输文件过程解析
2019/11/05 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
python 动态绘制爱心的示例
2020/09/27 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
2021/02/03 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
自荐信要包含哪些内容
2013/11/06 职场文书
机关财务管理制度
2014/01/17 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
美术专业自荐信
2014/07/07 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
优秀英文求职信范文
2015/03/19 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL
python中 .npy文件的读写操作实例
2022/04/14 Python
Python软件包安装的三种常见方法
2022/07/07 Python