专栏首页同步博客YII关联字段并带搜索排序功能

YII关联字段并带搜索排序功能

1、简介

  从接触yii框架到现在已经快有两个月了,但是自己对yii框架的了解程度并不是很深,并没有系统地去学习,仅仅只是在做项目的时候遇到不懂得知识才去翻手册。

  在上一个项目中因为需要将关联的表的字段显示出来并且带搜索排序功能,这个在之前并没有接触过,因此在手册中查找了相关的资料把这个需求写出来了,并在有道云做了一些笔记,今天刚好是周末有时间就将它整理成一篇博客吧。

  废话不多说,直接上步骤吧。

2、操作步骤

  背景:这里针对GII自动生成的CURL中,增加关联表字段。

  需求:A表中有一个字段pt_id关联B表;现在需要在基于A表GII生成的CURL的基础上,增加A表关联B表字段的name值,并且带有搜索排序功能。

  2.1、step1在A model中添加一个方法

1 //意思即获取Pt的数据
2 public function getPt()    //get**  get后面任意
3 {
4     //模型名:className(),B表字段=>A表对应字段 
5     return $this->hasOne(Pt::className(), ['id' => 'ptid']); 
6 }

   2.2、step2在A search 中添加需要关联的字段变量

1 public $name;   //可以关联显示多个字段
2 public $*****;  //例子

   2.3、修改A search中的search函数

1 //search函数中添加 表示在SQL语句中增加关联查询
2 //看起来是那么的熟悉,哈哈
3 $query->joinWith(['pt']);   //这里等待pt中的值就是step1中get后面的命名

   2.4、在A search中设置排序配置

 1 //这里存放的是可以排序的字段
 2 //如果A Search已经存在setSort,则其他动,只需要添加新的字段就可以了
 3 //但是,我的yii 2生成的Search不存在这个排序,因此就需要额外添加了
 4 //注意:当你的search中不存在这个配置时,即表明默认配置里面有设置过,当你在这里添加一个setSort则将会覆盖默认配置,之前默认有排序功能的字段将会失效
 5 $dataProvider->setSort(
 6 'attributes'=>[
 7 //====添加新字段排序配置=
 8 'name'=>[
 9 'asc'=>['name' => SORT_ASC],
10 'desc'=>['name' => SORT_DESC],
11 'lable'=>'name',
12 ],
13 //==================
14 ]
15 );

   2.5、在A search中添加过滤配置

1 //在代码里面照着队形添加这一句即可
2 //like,关联表全名,this->name
3 $query->andFilterWhere(['like', '**_pt.name', $this->name]) ;

  2.6、修改index视图中的gridview

 1 'columns' => [
 2 //===========
 3 //添加
 4 [
 5           'attribute' => 'name',
 6           'label' => '平台',
 7           'value' => 'pt.name',
 8           'filter' => Html::activeTextInput($searchModel, 'name', [
 9               'class' => 'form-control'
10           ]),
11 ],
12 //=============
13 ]

  此时已经完成一大半了,你访问这个控制器,已经可以看到页面效果了,但是在搜索的时候确实失效的,为什么呢?

  因为此时你提交的这个字段信息是属于不安全的,程序中没有记录。

  2.7、给该字段设置为安全级别

1 //在A Search中的设置规则方法中添加
2 //name字段为safe
3 [['name'], safe]

大工告成!!

3、小结

  这里仅仅只是一个小小的例子,通过这个例子可以知道yii添加关联字段的方法,那么你就可以根据现有的知识更改出更多的花样出来。。。。

(以上是自己的一些见解,若有不足或者错误的地方请各位指出)

 作者:那一叶随风 http://www.cnblogs.com/phpstudy2015-6/

 原文地址:http://www.cnblogs.com/phpstudy2015-6/p/7712017.html

 声明:本博客文章为原创,只代表本人在工作学习中某一时间内总结的观点或结论。转载时请在文章页面明显位置给出原文链接

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 建立自己的Web service(SOAP篇)

      Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布...

    那一叶随风
  • memcached分布式缓存

      memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。Memcache集群主机不能够相互通信传输数据,它的“分布式”是基于客户端的...

    那一叶随风
  • Session攻击(会话劫持+固定)与防御

      Session对于Web应用无疑是最重要的,也是最复杂的。对于web应用程序来说,加强安全性的第一条原则就是 – 不要信任来自客户端的数据,一定要进行数据验...

    那一叶随风
  • java之spring之整合ssh

    github地址:https://github.com/Vincent-yuan/spring_ssh

    Vincent-yuan
  • Graphql入门

    GraphQL是一个查询语言,由Facebook开发,用于替换RESTful API。服务端可以用任何的语言实现。具体的你可以查看Facebook关于Graph...

    查理大叔
  • Python花式错误集锦(长期更新)

    Python是一门灵活的,有意思的,用途广泛的语言。近些年来,受到越来越多的重视。也有越来越多的人来学习这门语言。

    py3study
  • 文件批量重命名

    skylark
  • 网站搭建-django-学习成绩管理-10-查询成绩之后端实现

    系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3....

    zishendianxia
  • Python Set集合

    Python知识大全
  • django 自定义权限系统

    最近项目中需要做套权限管理系统,功能需求是对后端当前所有接口添加个权限验证功能,如果用户有访问这个接口权限则返回数据,没有这个接口的权限就提示用户无权访问该接口...

    用户4945346

扫码关注云+社区

领取腾讯云代金券