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 批量更新网页内容实现代码
Jan 05 PHP
解析link_mysql的php版
Jun 30 PHP
php去除数组中重复数据
Nov 18 PHP
wordpress安装过程中遇到中文乱码的处理方法
Apr 21 PHP
PHP版本如何选择?应该使用哪个版本?
May 13 PHP
详解WordPress中添加和执行动作的函数使用方法
Dec 29 PHP
Zend Framework动作助手Url用法详解
Mar 05 PHP
Yii2主题(Theme)用法详解
Jul 23 PHP
PHP判断表达式中括号是否匹配的简单实例
Oct 22 PHP
thinkPHP线上自动加载异常与修复方法实例分析
Dec 01 PHP
PHP实现git部署的方法教程
Dec 19 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
Oct 24 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
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
详解php设置session(过期、失效、有效期)
2015/11/12 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
javascript设计模式之对象工厂函数与构造函数详解
2015/07/30 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
angular ng-repeat数组中的数组实例
2017/02/18 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
laydate日历控件使用方法详解
2017/11/20 Javascript
微信小程序获取用户openid的实现
2018/12/24 Javascript
vue(2.x,3.0)配置跨域代理
2019/11/27 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[01:09]DOTA2次级职业联赛 - ishow.HMM战队宣传片
2014/12/01 DOTA
改进Django中的表单的简单方法
2015/07/17 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
Windows下安装Scrapy
2018/10/17 Python
详解用python写一个抽奖程序
2019/05/10 Python
Python使用LDAP做用户认证的方法
2019/06/20 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
计生工作先进事迹
2014/08/15 职场文书
在职员工证明书
2014/09/19 职场文书
暑假安全保证书
2015/02/28 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL