Yii2 联表查询数据丢失,即出现主键覆盖情况的解决方法
前段时间做项目,遇到一个问题,用yii2的AR连表查询数据的时候,理应该查出来更多的数据,但是实际得到的只有部分数据:
例如,有这么一个查询:
$query = OperaHotelRoom::find()
->select(['a.ID','a.ROOM_NAME','a.PARENT_ROOM_TYPE'])
->joinWith('runHotel b')
->from('opera_hotel_room a')
->where(['a.HOTEL_ID' => 197]);
$sql = $query->createCommand()->getRawSql();
$res = $query->asArray()->all();
这里的连表中主表个字表的关系是一对多,打出的,写成原生sql:
SELECT `a`.`ID`,`a`.`ROOM_NAME`,`a`.`PARENT_ROOM_TYPE`
FROM `opera_hotel_room` `a`
LEFT JOIN `run_hotel` `b` ON `a`.`HOTEL_ID` = `b`.`HOTEL_ID` AND `a`.`PARENT_ROOM_TYPE` = `b`.`BASE_ROOM_TYPE`
WHERE `a`.`HOTEL_ID` = 197
原生sql查到的结果:

但是AR查到的结果(只有13条):

自己观察下数据,就发现,将sql查出来的数据group by ID(ID是表的主键)后就得到了上面的13条记录,即,应AR连表查询的时候,会出现主键覆盖情况,
解决方案:
在select的时候,将主键select出来,并且起个新的字段名称,再查,就会发现,所有的数据都有了

以上。
Yii2 联表查询数据丢失,即出现主键覆盖情况的解决方法的更多相关文章
- yii2联表查询
我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_ ...
- Spring Hibernate JPA 联表查询 复杂查询(转)
今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...
- Spring Hibernate JPA 联表查询 复杂查询
今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...
- ThinkPHP---TP功能类之联表查询
[一]介绍 在原生的sql中使用join 语法进行数据的联表查询, 在ThinkPHP里支持联表查询操作,但是可以归纳成两种方式:table方法.join方法 (1)table方法:在TP中对应SQL ...
- MySQL 联表查询
关系型数据库,免不了表之间存在各种引用与关联.这些关联是通过主键与外键搭配来形成的.所以,取数据时,很大情况下单张表无法满足需求,额外的数据则需要将其他表加入到查询中来,这便是 JOIN 关键字完成的 ...
- mysql联表查询,使用phpStudy自带的
一.内联结.外联结.左联结.右联结的含义及区别在SQL标准中规划的(Join)联结大致分为下面四种:1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结.2.外联结:分为外左 ...
- Mybatis入门(四)------联表查询
Mybatis联表查询 一.1对1查询 1.数据库建表 假设一个老师带一个学生 CREATE TABLE teacher( t_id INT PRIMARY KEY, t_name VARCHAR(3 ...
- MySQL中的联表查询与子查询
0.准备数据 1.内连接:INNER JOIN 2.左连接:LEFT JOIN 3.右连接:RIGHT JOIN 4.USING子句 扩展知识点: 0.表别名的使用: 1.group by的用法 2. ...
- Django框架表关系外键-多对多外键(增删改查)-正反向的概率-多表查询(子查询与联表查询)
目录 一:表关系外键 1.提前创建表关系 2.目前只剩 书籍表和 书籍作者表没创建信息. 3.增 4.删 5.修改 二:多对多外键增删改查 1.给书籍绑定作者 2.删 3.修改 4.清空 三:正反向的 ...
随机推荐
- Office - Word 2013
1. 使用 Quick Parts 向Word中添加自定义属性: 2.
- 二十一、如何导入svg图片
svg就相当于字体,如何将生成的svg导入到自己的项目中去呢? 1.将类似下面的文件放入自己的项目中: 2.生成的svg中有一个style.css文件,将里面的内容拷贝到你的css中,然后更改上图的路 ...
- 完美兼容js的jsfuck小测试
无意间发现了一个可以完美兼容js语言的jsfuck语言,所以留一个备份 js转换jsfuck的工具 www.jsfuck.com 效果 代码(预警!!!有点长,不过是不是很有意思) <!DOCT ...
- .NET ->> 分享一个字符串模糊匹配指数的方法
链接: http://www.tsjensen.com/blog/post/2011/05/27/Four+Functions+For+Finding+Fuzzy+String+Matches+In+ ...
- drag与drop事件
为了支持网页上一些元素的拖动效果,可以使用drag和drog事件. 目前ie 5.0+, firefox 3.5+等都支持这些事件,ECMA Script第5版正式将其纳入标准. 对于被拖动的元素来说 ...
- ESXi中的虚拟机如何使用U盘和加密Key
最近想在虚拟机中的主机使用通讯加密key来部署专门用于转发和加密的通讯前置机.故查询测试一下是不是能识别. 第一步:在虚拟宿主机上添加USB控制器,右键单击目标虚拟机,选中"编辑设置&quo ...
- 字符串模式匹配之KMP算法的next数组详解与C++实现
相信来看next数组如何求解的童鞋已经对KMP算法是怎么回事有了一定的了解,这里就不再赘述,附上一个链接吧:https://www.cnblogs.com/c-cloud/p/3224788.html ...
- 玩转Windows/Linux tftp命令
tftp很好理解, 主要用来传文件, 下面以我的操作来谈谈tftp中最重要的几个命令. 一. Windows上的sftp命令(据说Linux上也是这样, 当然此处是指非嵌入式的Linux) 步骤: a ...
- 【jQuery】jQuery中的事件捕获与事件冒泡
在介绍之前,先说一下JavaScript中的事件流概念.事件流描述的是从页面中接受事件的顺序. 一.事件冒泡( Event Bubbling) IE 的事件流叫做事件冒泡,即 ...
- lnmp环境下nginx配置‘负载均衡’
NGINX负载均衡分发请求的几种方式: 1.轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除.2.weight 指定轮询几率,weight和访问比率成正比 ...