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出来,并且起个新的字段名称,再查,就会发现,所有的数据都有了

以上

G

M

T

Detect languageAfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

AfrikaansAlbanianArabicArmenianAzerbaijaniBasqueBelarusianBengaliBosnianBulgarianCatalanCebuanoChichewaChinese (Simplified)Chinese (Traditional)CroatianCzechDanishDutchEnglishEsperantoEstonianFilipinoFinnishFrenchGalicianGeorgianGermanGreekGujaratiHaitian CreoleHausaHebrewHindiHmongHungarianIcelandicIgboIndonesianIrishItalianJapaneseJavaneseKannadaKazakhKhmerKoreanLaoLatinLatvianLithuanianMacedonianMalagasyMalayMalayalamMalteseMaoriMarathiMongolianMyanmar (Burmese)NepaliNorwegianPersianPolishPortuguesePunjabiRomanianRussianSerbianSesothoSinhalaSlovakSlovenianSomaliSpanishSundaneseSwahiliSwedishTajikTamilTeluguThaiTurkishUkrainianUrduUzbekVietnameseWelshYiddishYorubaZulu

Text-to-speech function is limited to 200 characters

Options : History : Feedback : Donate

Close

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Super 前端

Window下安装Maven及Eclipse中安装m2eclipse插件

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

10420
来自专栏Super 前端

解决PKIX问题:unable to find valid certification path to requested target【X509TrustManager】

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

16420
来自专栏Super 前端

JavaScript对象

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

9230
来自专栏Super 前端

iBatis搭建JAVA项目

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

9020
来自专栏Super 前端

Memcache集群环境下缓存解决方案

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

12920
来自专栏zhisheng

IDEA 这个快捷键有 17 个实用技巧,你竟然还不知道?

IDEA里有一个万能快捷键(alt enter),功能非常强大,同一个快捷键,可以根据不同的语境提示你不同的操作, 很多人可能还不了解这些功能,在处理代码的时候...

22130
来自专栏Super 前端

java启动和停止sh

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

12320
来自专栏Super 前端

JavaScript闭包及实现循环绑定事件

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

12510
来自专栏Super 前端

解决PKIX问题:unable to find valid certification path to requested target

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

54020
来自专栏Super 前端

Jad反编译及eclipse反编译插件JadClipse

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

79320

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励