Yii2实现让关联字段支持搜索功能的方法


Posted in PHP onAugust 10, 2016

本文实例讲述了Yii2实现让关联字段支持搜索功能的方法。分享给大家供大家参考,具体如下:

这里有两张表,表结构如下,companies_compay_id 为外键

yii2advanced.branches表:

branch_id:int(11)
companies_company_id:int(11)
branch_name:varchar(100)
branch_address:varchar(255)
branch_created_date:datetime
branch_status:enum('active','inactive')

yii2advanced.companies表:

company_id:int(11)
company_name:varchar(100)
company_email:varchar(100)
company_address:varchar(255)
logo:varchar(200)
company_start_date:datetime
company_create_date:datetime
company_status:enum('active','inactive')

在上面表中,可以用companiesCompany.company_name来获取公司名,不过这样是不支持搜索的。

想要支持搜索功能,需要在branches的index视图添加以下代码:

<?= GridView::widget([
  'dataProvider' => $dataProvider,
  'filterModel' => $searchModel,
  'columns' => [
    ['class' => 'yii\grid\SerialColumn'],
    //添加的代码开始
    [
      'label'=>'公司名',
      'attribute'=>'companies_company_id',
      'value'=>'companiesCompany.company_name'
    ],
     //添加的代码结束
    'companiesCompany.company_name',
    // 'branch_id',
    // 'companies_company_id',
    'branch_name',
    'branch_address',
    'branch_created_date',
    // 'branch_status',
    ['class' => 'yii\grid\ActionColumn'],
  ],
]); ?>

然后修改SearchBranches.php

修改rules方法为:

public function rules()
{
  return [
    [['branch_id'], 'integer'],
    [['branch_name', 'branch_address', 'branch_created_date', 'branch_status','companies_company_id'], 'safe'],
  ];
}

修改search方法:

public function search($params)
{
  $query = Branches::find();
  $dataProvider = new ActiveDataProvider([
    'query' => $query,
  ]);
  $this->load($params);
  if (!$this->validate()) {
    // uncomment the following line if you do not want to any records when validation fails
    // $query->where('0=1');
    return $dataProvider;
  }
  // 添加下面这行代码
  $query->joinWith('companiesCompany');
  $query->andFilterWhere([
    'branch_id' => $this->branch_id,
  //  'companies_company_id' => $this->companies_company_id,
    'branch_created_date' => $this->branch_created_date,
  ]);
  $query->andFilterWhere(['like', 'branch_name', $this->branch_name])
    ->andFilterWhere(['like', 'branch_address', $this->branch_address])
    ->andFilterWhere(['like', 'branch_status', $this->branch_status])
     // 添加下面这行代码
    ->andFilterWhere(['like', 'companies.company_name', $this->companies_company_id]);
  return $dataProvider;

刷新页面即可看到

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
木翼下载系统中说明的PHP安全配置方法
Jun 16 PHP
PHP 存储文本换行实现方法
Jan 05 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
[原创]php简单隔行变色功能实现代码
Jul 09 PHP
php微信公众平台开发(四)回复功能开发
Dec 06 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 PHP
php实现数组纵向转横向并过滤重复值的方法分析
May 29 PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 PHP
PHP实现登录验证码校验功能
May 17 PHP
Yii框架实现对数据库的CURD操作示例
Sep 03 PHP
Yii2实现同时搜索多个字段的方法
Aug 10 #PHP
Yii2实现上下联动下拉框功能的方法
Aug 10 #PHP
Yii2基于Ajax自动获取表单数据的方法
Aug 10 #PHP
教你在header中隐藏php的版本信息
Aug 10 #PHP
PHP通过加锁实现并发情况下抢码功能
Aug 10 #PHP
PHP身份证校验码计算方法
Aug 10 #PHP
PHP5.4起内置web服务器使用方法
Aug 09 #PHP
You might like
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
2010年最佳jQuery插件整理
2010/12/06 Javascript
基于JQuery的模拟苹果桌面Dock效果(稳定版)
2012/10/15 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
jQuery.event兼容各浏览器的event详细解析
2013/12/18 Javascript
解决js中window.open弹出的是上次的缓存页面问题
2013/12/29 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
JS执行控制之节流模式实例分析
2018/12/21 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
通过GASP让vue实现动态效果实例代码详解
2019/11/24 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
vue 手机物理监听键+退出提示代码
2020/09/09 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
Django自定义分页效果
2017/06/27 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
对Pytorch中Tensor的各种池化操作解析
2020/01/03 Python
python opencv实现图像配准与比较
2021/02/09 Python
HTML5 History API 实现无刷新跳转
2016/01/11 HTML / CSS
数据库什么时候应该被重组
2012/11/02 面试题
《独坐敬亭山》教学反思
2014/04/08 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
教师个人教学反思
2016/02/23 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
JavaScript 对象创建的3种方法
2021/11/17 Javascript