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 相关文章推荐
我常用的几个类
Oct 09 PHP
smtp邮件发送一例
Oct 09 PHP
用PHP实现ODBC数据分页显示一例
Oct 09 PHP
PHP获取网址的顶级域名函数代码
Sep 24 PHP
php实现的常见排序算法汇总
Sep 08 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
php实现上传图片文件代码
Jul 19 PHP
php封装好的人民币数值转中文大写类
Dec 20 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
Laravel框架基于中间件实现禁止未登录用户访问页面功能示例
Jan 17 PHP
启用OPCache提高PHP程序性能的方法
Mar 21 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
Dec 04 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
使用无限生命期Session的方法
2006/10/09 PHP
php递归实现无限分类的方法
2015/07/28 PHP
document.forms[].submit()使用介绍
2014/02/19 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
深入分析下javascript中的[]()+!
2015/07/07 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
vue项目中v-model父子组件通信的实现详解
2017/12/10 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
2020/04/23 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
Python魔术方法详解
2015/02/14 Python
python写入中英文字符串到文件的方法
2015/05/06 Python
Python smallseg分词用法实例分析
2015/05/28 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
Python基于Matplotlib库简单绘制折线图的方法示例
2017/08/14 Python
Python代码太长换行的实现
2019/07/05 Python
Python Web版语音合成实例详解
2019/07/16 Python
丹尼尔惠灵顿手表天猫官方旗舰店:Daniel Wellington
2017/08/25 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
求职自荐信的格式
2014/04/07 职场文书
学雷锋月活动总结
2014/04/25 职场文书
事业单位考核材料
2014/05/21 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
运动会广播稿200字
2014/10/18 职场文书
优秀班集体申报材料
2014/12/25 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
结婚典礼致辞
2015/07/28 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
JavaScript 防篡改对象的用法示例
2021/04/24 Javascript