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程序?
Dec 08 PHP
php中is_null,empty,isset,unset 的区别详细介绍
Apr 28 PHP
简单的php中文转拼音的实现代码
Feb 11 PHP
ThinkPHP中的关联模型注意点
Jun 16 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
简介PHP的Yii框架中缓存的一些高级用法
Mar 29 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
ThinkPHP5 验证器的具体使用
May 31 PHP
PHP7数组的底层实现示例
Aug 25 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
Dec 04 PHP
PHP实现简单的协程任务调度demo示例
Feb 01 PHP
解决windows上php xdebug 无法调试的问题
Feb 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与javascript的两种交互方式
2006/10/09 PHP
php 文章调用类代码
2011/08/11 PHP
用来解析.htgroup文件的PHP类
2012/09/05 PHP
php管理nginx虚拟主机shell脚本实例
2014/11/19 PHP
php中file_exists函数使用详解
2015/05/08 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
JS控制静态页面传递参数并获取参数应用
2016/08/10 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
详解JavaScript按概率随机生成事件
2017/08/02 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
利用JavaScript缓存远程窃取Wi-Fi密码的思路详解
2018/11/05 Javascript
vue中子组件传递数据给父组件的讲解
2019/01/27 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
python实现贪吃蛇小游戏
2020/03/21 Python
python处理“
2019/06/10 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
Python使用itcaht库实现微信自动收发消息功能
2020/07/13 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
Expedia英国:全球最大的在线旅游公司
2017/09/07 全球购物
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
触发器(trigger)的功能都有哪些?写出一个触发器的例子
2012/09/17 面试题
平安建设实施方案
2014/03/19 职场文书
廉洁自律承诺书
2014/03/27 职场文书
房屋委托书范本
2014/04/04 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
提升Nginx性能的一些建议
2021/03/31 Servers