前段时间做项目,遇到一个问题,用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 联表查询数据丢失,即出现主键覆盖情况的解决方法的更多相关文章

  1. yii2联表查询

    我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer   (id  customer_name) 订单表Order          (id  order_ ...

  2. Spring Hibernate JPA 联表查询 复杂查询(转)

    今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...

  3. Spring Hibernate JPA 联表查询 复杂查询

    今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...

  4. ThinkPHP---TP功能类之联表查询

    [一]介绍 在原生的sql中使用join 语法进行数据的联表查询, 在ThinkPHP里支持联表查询操作,但是可以归纳成两种方式:table方法.join方法 (1)table方法:在TP中对应SQL ...

  5. MySQL 联表查询

    关系型数据库,免不了表之间存在各种引用与关联.这些关联是通过主键与外键搭配来形成的.所以,取数据时,很大情况下单张表无法满足需求,额外的数据则需要将其他表加入到查询中来,这便是 JOIN 关键字完成的 ...

  6. mysql联表查询,使用phpStudy自带的

    一.内联结.外联结.左联结.右联结的含义及区别在SQL标准中规划的(Join)联结大致分为下面四种:1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结.2.外联结:分为外左 ...

  7. Mybatis入门(四)------联表查询

    Mybatis联表查询 一.1对1查询 1.数据库建表 假设一个老师带一个学生 CREATE TABLE teacher( t_id INT PRIMARY KEY, t_name VARCHAR(3 ...

  8. MySQL中的联表查询与子查询

    0.准备数据 1.内连接:INNER JOIN 2.左连接:LEFT JOIN 3.右连接:RIGHT JOIN 4.USING子句 扩展知识点: 0.表别名的使用: 1.group by的用法 2. ...

  9. Django框架表关系外键-多对多外键(增删改查)-正反向的概率-多表查询(子查询与联表查询)

    目录 一:表关系外键 1.提前创建表关系 2.目前只剩 书籍表和 书籍作者表没创建信息. 3.增 4.删 5.修改 二:多对多外键增删改查 1.给书籍绑定作者 2.删 3.修改 4.清空 三:正反向的 ...

随机推荐

  1. geoserver 知识小计

    http://localhost:8888/geoserver/wms?service=WMS&request=GetCapabilities 这个地址用于获取发布的WMS服务的属性,用于获取 ...

  2. png的故事:隔行扫描算法

    转载自AlloyTeam:http://www.alloyteam.com/2017/06/the-story-of-png-deinterlacing-algorithm/ 前言 前文已经讲解过如何 ...

  3. C# 导出excel文件处理科学计数法办法

    在邦定gridview控件时在rowdatabound事件中队数据格式化 protected void DataGridView1_RowDataBound(object sender, GridVi ...

  4. Linux下SVN安装配置及应用

    一.安装篇 centos下yum安装 yum install subversion 查看安装是否成功: svnserve --version 二.配置篇 创建svn版本库目录 mkdir /home/ ...

  5. HBuilde H5开发,关于JSON的Storage存储

    今天踩坑了,在这里记一下. 我想做一个列表,开始是一个一个复制粘贴,然后发现这样太不灵活了,如果我有更多内容要填难道还要再一个一个复制吗? 所以我想到直接用JS动态生成最好,我的思路是这样的: //首 ...

  6. SAP S/4HANA extensibility扩展原理介绍

    SAP产品总的extensibility扩展原理介绍: 看Jerry这篇文章. SAP Cloud for Customer Extensibility的设计与实现 我的同事Boris写的. 而本文是 ...

  7. x:Name与Name区别

    x:Name与Name有两个不同点: 1.x:Name是Xaml的标记特性,任何在Xaml中定义的元素,都可以使用x:Name来为元素指定名称. Name是FrameworkElement定义的依赖项 ...

  8. O(1) 和 O(n) 的区别

    举个简单的例子,要从0加到n,我们会这么写:int sum = 0;for(int i = 0; i<=n; ++i){   sum += i;}一共算了n次加法,那么就说这个时间复杂度是O(n ...

  9. java里面list是引用的好例子

    java里面的赋值和引用是不同的,以后要详细总结一下! 看一个例子: public static void main(String[] args) { List<String> list ...

  10. codeforces 848B Rooter's Song

    题目链接 正解:排序+模拟. 我们注意到两个点碰撞的必要条件,$pi+tj=pj+ti$,移项以后发现就是$pi-ti=pj-tj$,那么我们可以把$p-t$相同的点分为同一组. 然后我们还可以发现一 ...