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 相关文章推荐
PHP5中使用PDO连接数据库的方法
Aug 01 PHP
PHP读取文件并可支持远程文件的代码分享
Oct 03 PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 PHP
php防止sql注入代码实例
Dec 18 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
必须收藏的23个php实用代码片段
Feb 02 PHP
php中文乱码问题的终极解决方案汇总
Aug 01 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
Aug 02 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
Feb 10 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 PHP
PHP读取目录树的实现方法分析
Mar 22 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笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
基于php在各种web服务器的运行模式详解
2013/06/03 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
php实现记事本案例
2020/10/20 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
js简单工厂模式用法实例
2015/06/30 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
简单快速的实现js计算器功能
2017/08/17 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
django基础之数据库操作方法(详解)
2017/05/24 Python
Python iter()函数用法实例分析
2018/03/17 Python
python爬虫租房信息在地图上显示的方法
2019/05/13 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
Python3监控疫情的完整代码
2020/02/20 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
外贸公司实习自我鉴定
2013/09/24 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
新学期国旗下演讲稿
2014/05/08 职场文书
建筑工地标语
2014/06/18 职场文书
宣传普通话标语
2014/06/27 职场文书
公务员爱岗敬业心得体会
2016/01/25 职场文书
MySql新手入门的基本操作汇总
2021/05/13 MySQL
pnpm对npm及yarn降维打击详解
2022/08/05 Javascript