前段时间做项目,遇到一个问题,用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. Keras 时序模型

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Thinking_boy1992/article/details/53207177 本文翻译自 时序模 ...

  2. AdobeCS3DesignPremiumChs_Greendown.cn使用注册机激活失败重新激活操作方法

    解决Adobe Acrobat 9 Pro序列号无效/重新激活方法 1.删除C:\Program Files\Common Files\Adobe\Adobe PCD\cache\cache.db和C ...

  3. sharePoint查看与更改用户登录账号

    PS D:\deployScript> $user=(Get-SPUser -IDENTITY "i:0e.t|xmssts|zhangshan" -Web http://t ...

  4. 【Web crawler】print_all_links

    How to repeat Procedures&Control CS重要概念 1.1 过程procedures 封装代码,代码重用 1.2 控制Control DEMO # -*- codi ...

  5. linux 系统开机自启执行 操作的配置

    1 linux 服务注册 service文件 在service文件中设置变量和环境变量 [Unit] Description= #服务描述 After=syslog.target #服务启动依赖 [S ...

  6. 简单的python爬虫--爬取Taobao淘女郎信息

    最近在学Python的爬虫,顺便就练习了一下爬取淘宝上的淘女郎信息:手法简单,由于淘宝网站本上做了很多的防爬措施,应此效果不太好! 爬虫的入口:https://mm.taobao.com/json/r ...

  7. [转]Android开源项目收藏分享

    转自:http://blog.csdn.net/dianyueneo/article/details/40683285 Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 St ...

  8. 鉴定JavaScript中的数据类型

    众所周知,JavaScript是一门弱类型的语言,但是这并不代表JavaScript中没有数据类型.JavaScript中常见的数据类型有string.number.object等等,通常我们使用ty ...

  9. SOJ3266 Birthday

    Time Limit: 1000MS Memory Limit: 65536 K Description Today is Windy's birthday. What can I say? Inpu ...

  10. JQuery的异步回调支持 - Promise、Deferred

    1.Deferred对象: 一般在函数内部进行声明,并在运行过程中改变其状态,例如成功或失败,最终返回Promise对象用于状态监听. 主要方法: Deferred.resolve(param...) ...