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读取数据库信息的几种方法
May 24 PHP
PHP下一个非常全面获取图象信息的函数
Nov 20 PHP
PHP 遍历文件实现代码
May 04 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
Feb 28 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
Apr 08 PHP
thinkphp实现数组分页示例
Apr 13 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
Mar 25 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
May 09 PHP
Yii框架中sphinx索引配置方法解析
Oct 18 PHP
thinkPHP5 ACL用户权限模块用法详解
May 10 PHP
php post json参数的传递和接收处理方法
May 31 PHP
基于laravel where的高级使用方法
Oct 10 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中调用JAVA
2006/10/09 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
WordPress网站性能优化指南
2015/11/18 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
去掉gridPanel表头全选框的小例子
2013/07/18 Javascript
利用a标签自动解析URL分析网址实例
2014/10/20 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
JavaScript比较两个对象是否相等的方法
2015/02/06 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
基于BootStrap Metronic开发框架经验小结【二】列表分页处理和插件JSTree的使用
2016/05/12 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
关于layui toolbar和template的结合使用方法
2019/09/19 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
JavaScript中的相等操作符使用详解
2019/12/21 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
Python实现一个简单的验证码程序
2017/11/03 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
一波HTML5 Canvas基础绘图实例代码集合
2016/02/28 HTML / CSS
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
我的大学生活职业生涯规划
2014/01/02 职场文书
决心书范文
2014/03/11 职场文书
超市仓管员岗位职责
2014/04/07 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
家属联谊会致辞
2015/07/31 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL