今天自己做一个小demo,为了不要冗余字段,需要进行多表联合查询、搜索

yii中,用model来映射数据库(其实好多框架都是这么搞的),一个模型类通常有一个search模型类跟着一起

废话不多说了,首先,数据库里有布置一张表,我习惯让数据表之间相互独立,建表的时候没有添加外键约束,而是采用 u_id、a_id 等字段来表示关联关系;

下图是我设计表格中常常包括的字段

上面的表为一个join报名表,u_id是报名用户的id,j_id是报名项目的id,a_id是该项目负责人的id,分别关联了三张表

通过Gii生成的默认首页表单不包括其他三张表的内容,这里不赘述,要实现如下效果:

需要对如下几个文件进行修改:

  1. 本页对应model、修改是增加相应的get方法
  2. 对应的modelSearch、修改是把关联加进去,用于搜索
  3. 首页视图的修改,替换原来的U ID、J ID、A ID等

一、修改model,增加get方法

yii中,get方法实际上可以理解成往model对象中增加新的属性、方法,也就是添加与其他表的映射关系

  /*** 根据u_id获取用户信息*/public function getUser(){return $this->hasOne(User::className(), ['id' => 'u_id']);}

二、修改modelSearch,加入关联查询

...其他代码...//增加成员属性(增加的查询字段)public $real_name;
//在ruler规则中添加
[['real_name'], 'safe'],
//在search方法中 ... 
//增加查询表 也就是要和哪张表一起查$query->joinWith(['user']);

...
$query->andFilterWhere(['like', 'user.real_name', $this->real_name]); ... 

//设置搜索同时给新增的选项添加排序规则 //注意是重写,所以要加上原来有的项目 

$dataProvider->setSort(['attributes' => [      'id',       'expectation',       'work_time',       'status',       'real_name' => [         'asc' => ['user.real_name' => SORT_ASC],         'desc' => ['user.real_name' => SORT_DESC],         'label' => 'user.real_name' ],       ]     ]    ]); 

return $dataProvider;

setSort是为在首页表上显示的字段提供排序的规则,它自己的有,新加入的需要添加一下,会覆盖原有的,所以模型本来的字段不能漏,否则无法按该字段排序

三、修改view

看代码,这个是视图文件中的index.php文件,也就是修改GridView

<?= GridView::widget(['dataProvider' => $dataProvider,'filterModel' => $searchModel,'columns' => ['id',//'u_id',
                ['attribute' => 'real_name','value' => 'user.real_name','label' => '用户'],'expectation','work_time','status',['class' => 'yii\grid\ActionColumn'],],]); ?>

这样就可以搜索了,也可以排序的哦

文笔不好,有不妥当之处欢迎交流 ^_^

转载于:https://www.cnblogs.com/huyujun/p/9604333.html

yii多表查询--学习随笔相关推荐

  1. php yii多表查询

    一个Company记录可以对应多个CompanyUser纪录 Company表: [['id', 'nature_id', 'scale_id', 'pro_id', 'created_at', 'u ...

  2. gorm Preload主子表查询 学习笔记

    主表字段中有一个子表的集合,子表存主表的关联id,类似于这样的结构: //主表 type User struct{ID intInfo []UserInfo //子表的数据 }//子表 type Us ...

  3. MySQL学习笔记06【多表查询、子查询、多表查询练习】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  4. sql 多表多行模糊查询_从零开始学习SQL(五)多表查询

    经过之前的学习,现在我们已经对查询有了一定的了解,但是我们目前的所有查询都只能找到在一张表中的数据,但如果我们需要寻找分布在多张表格中的数据时,这种之前的查询就做不到了,这时就需要引入一种新的查询方法 ...

  5. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

    三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...

  6. 零基础带你学习MySQL—多表查询笛卡尔集(二十)

    零基础带你学习MySQL-多表查询笛卡尔集(二十) 一.多表查询 多表查询:就是指基于两个和两个以上的表的查询,在实际应用中,单个表并不能满足你的需求,我们经常需要在很多个表之间查询数据 二.笛卡尔集 ...

  7. sql 查询手动创建的表_学习SQL:使用SQL查询手动创建报告

    sql 查询手动创建的表 In the previous two articles, we've practiced SQL queries and went through a few more e ...

  8. MySQL学习记录04where条件子句、联表查询、子查询

    文章目录 MySQL学习记录04where条件子句.联表查询.子查询 4.1DQL 4.2指定查询字段 4.3where条件子句 4.4联表查询 4.5分页和排序 4.6子查询 MySQL学习记录04 ...

  9. alin的学习之路(数据库篇:三)(多表查询,子查询,集合运算,数据处理)

    alin的学习之路(数据库篇:三)(多表查询,子查询,集合运算,数据处理) 1. 多表查询 1.1 笛卡儿积 笛卡尔积就是两个集合的乘积计算 . 如果多个表进行联合查询, 得到结果是一个笛卡尔积, 举 ...

最新文章

  1. python 归一化_只需 45 秒,Python 给故宫画一组手绘图!
  2. fork/join 并行编程
  3. c语言猜拳游戏中出现的关键词,C语言猜拳游戏代码及分析
  4. 一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式
  5. python入门编程软件免费-Python编程干货免费领取!!!
  6. python 贴吧自动回复机-python借助wxpy与图灵实现微信机器人自动回复消息
  7. python爬取豆瓣电影TOP250
  8. 卡扇区数据教程_分享一款硬盘分区和数据恢复软件
  9. After Keying for mac(AE头发细节优化还原抠像脚本)v1.04
  10. php的转义字符quot;反斜杠quot;是,php如何去除转义字符中的反斜杠
  11. 静默错误:Oracle 数据库是如何应对和处理的 ?
  12. node.js与python_Node.js与Python
  13. 求 s = a+aa+aaa+… …+aaa…a的值,其中a是一个数字
  14. 萝卜小姐的整车第一弹—MCU 软件烧录及升级说明
  15. 服务器冗余电源维修图纸,冗余热备份电源的电路图设计
  16. 计算机word文档快速打数字,word快速提取纯数字
  17. 用户和组管理及思维导图
  18. canvas绘制文字
  19. 太阳计算机音乐,邱振哲《太阳》[FLAC/MP3-320K]
  20. JVM JDK JRE JSE的简单介绍

热门文章

  1. Optical_Flow(2)
  2. 【Transformer】DETR: End-to-End Object Detection with Transformers
  3. 使用Java解决您的数据科学问题
  4. 蜕变与成长中的青春创作:评论家谈少数民族青年作家的创作
  5. 北京某打工子弟学校之三
  6. Ubuntu中配置FTP服务
  7. Matlab与C/C++/Java的一些区别
  8. react登录页面_React 实现路由拦截
  9. 区块链基础语言(三)——Go语言开发工具
  10. jekins构建触发器详解