zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    创建、删除swap分区
    从show slave status 中1062错误提示信息找到binlog的SQL
    ORA-28040: No matching authentication protocol
    Python中序列解包与函数的参数收集之间的关系
    第8.24节 使用__subclasses__查看类的直接子类
    利用Python特殊变量__dict__快速实现__repr__的一种方法
    Python中使用f字符串进行字符串格式化的方法
    转:python提取浏览器Cookie
    CSDN-markdown编辑器使用方法
    转:解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别
  • 原文地址:https://www.cnblogs.com/phpstudy2015-6/p/7712017.html
Copyright © 2011-2022 走看看