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格式化工具Beautify PHP小小BUG
Apr 24 PHP
php xml实例 留言本
Mar 20 PHP
php Smarty模板生成html文档的方法
Apr 12 PHP
TMDPHP 模板引擎使用教程
Mar 13 PHP
PHP 第一节 php简介
Apr 28 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
PHP基本语法总结
Sep 06 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
Mar 25 PHP
浅谈PHP中try{}catch{}的使用方法
Dec 09 PHP
PHP获取路径和目录的方法总结【必看篇】
Mar 04 PHP
Laravel find in set排序实例
Oct 09 PHP
Laravel 自定命令以及生成文件的例子
Oct 23 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
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
js实现的折叠导航示例
2013/11/29 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
原生js实现仿window10系统日历效果的实例
2017/10/31 Javascript
Java设计中的Builder模式的介绍
2018/03/22 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
Python实现远程调用MetaSploit的方法
2014/08/22 Python
分析Python的Django框架的运行方式及处理流程
2015/04/08 Python
Python中的字符串查找操作方法总结
2016/06/27 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
Python模拟用户登录验证
2017/09/11 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
详解python中的index函数用法
2019/08/06 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
利用Python过滤相似文本的简单方法示例
2021/02/03 Python
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
婚礼主持词开场白
2014/03/13 职场文书
无私奉献演讲稿
2014/09/04 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
交通事故案件代理词
2015/05/23 职场文书
五年级作文之成长
2019/09/16 职场文书