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 格式化数字的时候注意数字的范围
Apr 13 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
php跨域cookie共享使用方法
Feb 20 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
PHP中Fatal error session_start()错误解决步骤
Aug 05 PHP
PHP实现简单实用的分页类代码
Apr 08 PHP
PHP递归遍历多维数组实现无限分类的方法
May 06 PHP
详解php中空字符串和0之间的关系
Oct 23 PHP
详解Yii2 rules 的验证规则
Dec 02 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 PHP
PHP中16个高危函数整理
Sep 19 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 FTP类的详解
2013/06/13 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
鼠标焦点离开文本框时验证的js代码
2013/07/19 Javascript
js中运算符&amp;&amp; 和 || 的使用记录
2014/08/21 Javascript
JavaScript实现关键字高亮功能
2014/11/12 Javascript
JavaScript中setMonth()方法的使用详解
2015/06/11 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
vue集成kindeditor富文本的实现示例代码
2019/06/07 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
python+opencv识别图片中的圆形
2020/03/25 Python
分享vim python缩进等一些配置
2018/07/02 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
2020/02/25 Python
Python实现GIF图倒放
2020/07/16 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
倩碧香港官方网站:Clinique香港
2017/11/13 全球购物
网上常见的一份Linux面试题(多项选择部分)
2014/09/09 面试题
公司综合部的成员自我评价分享
2013/11/05 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
党支部四风整改方案
2014/10/25 职场文书
怎么用Python识别手势数字
2021/06/07 Python