Yii2 联表查询数据丢失,即出现主键覆盖情况的解…
2018-06-22 05:34:13来源:未知 阅读 ()
前段时间做项目,遇到一个问题,用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出来,并且起个新的字段名称,再查,就会发现,所有的数据都有了
以上。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:堆和栈的区别(经典转载)
- PHP实现的折半查询算法示例 2020-02-17
- php mysql PDO 查询操作的实例详解 2020-02-15
- thinkphp中的多表关联查询的实例详解 2020-02-07
- 详解Yii2框架实现登录、退出及自动登录功能的方法 2019-12-15
- PHP实现手机归属地查询API接口实现代码 2019-09-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash