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目录管理函数小结
Sep 10 PHP
PHP 文件类型判断代码
Mar 13 PHP
discuz程序的PHP加密函数原理分析
Aug 05 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
php中怎么搜索相关联数组键值及获取之
Oct 17 PHP
php通过asort()给关联数组按照值排序的方法
Mar 18 PHP
微信支付PHP SDK ―― 公众号支付代码详解
Sep 13 PHP
Windows上php5.6操作mongodb数据库示例【配置、连接、获取实例】
Feb 13 PHP
PHP创建对象的六种方式实例总结
Jun 27 PHP
imagettftext() 失效,不起作用
Mar 09 PHP
php修改word的实例方法
Nov 17 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导航下拉菜单的实现如此简单
2013/09/22 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
PHP面向对象程序设计之命名空间与自动加载类详解
2016/12/02 PHP
一个获取第n个元素节点的js函数
2014/09/02 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
layui上传图片到服务器的非项目目录下的方法
2019/09/26 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
Python实现简易端口扫描器代码实例
2017/03/15 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
Python面向对象魔法方法和单例模块代码实例
2020/03/25 Python
Python解析微信dat文件的方法
2020/11/30 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
中专毕业生自我鉴定范文
2013/11/09 职场文书
爱心活动计划书
2014/04/26 职场文书
小学德育工作经验交流材料
2014/05/22 职场文书
校庆团日活动总结
2014/08/28 职场文书
合作协议书模板2014
2014/09/26 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
同乡会致辞
2015/07/30 职场文书
开学第一周日记(三篇范文)
2019/08/23 职场文书
浅析NIO系列之TCP
2021/06/15 Java/Android