Yii2 联表查询数据丢失,即出现主键覆盖情况的解决方法
Posted Steven*
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 联表查询数据丢失,即出现主键覆盖情况的解决方法的主要内容,如果未能解决你的问题,请参考以下文章