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时间戳使用实例代码
Jun 07 PHP
PHP如何抛出异常处理错误
Mar 02 PHP
如何使用php绘制在图片上的正余弦曲线
Jun 08 PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
ThinkPHP之R方法实例详解
Jun 20 PHP
php使用explode()函数将字符串拆分成数组的方法
Feb 17 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
header与缓冲区之间的深层次分析
Jul 30 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
PHP+mysql实现的三级联动菜单功能示例
Feb 15 PHP
php+redis实现消息队列功能示例
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程序员的13个好习惯小结
2012/02/20 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
js函数般调用正则
2008/04/08 Javascript
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
利用腾讯的ip地址库做ip物理地址定位
2010/07/24 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
javascript拖拽上传类库DropzoneJS使用方法
2013/12/05 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
浅谈JavaScript中数组的增删改查
2016/06/20 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
Python中猜拳游戏与猜筛子游戏的实现方法
2020/09/04 Python
安全检查验收制度
2014/01/12 职场文书
美术国培研修感言
2014/02/12 职场文书
校园公益广告语
2014/03/13 职场文书
医德医风演讲稿
2014/05/20 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
奖学金个人总结
2015/03/04 职场文书
毕业论文致谢词
2015/05/14 职场文书
图书馆义工感想
2015/08/07 职场文书