QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

切换风格 注册 找回密码

php开发-PHP教程网


发表于 2018-1-9 14:48:26 | 显示全部楼层 |阅读模式
前段时间做项目,遇到一个问题,用yii2的AR连表查询数据的时候,理应该查出来更多的数据,但是实际得到的只有部分数据:
例如,有这么一个查询:
  1. $query = OperaHotelRoom::find()
  2.             ->select(['a.ID','a.ROOM_NAME','a.PARENT_ROOM_TYPE'])
  3.             ->joinWith('runHotel b')
  4.             ->from('opera_hotel_room a')
  5.             ->where(['a.HOTEL_ID' => 197]);
  6. $sql = $query->createCommand()->getRawSql();
  7. $res = $query->asArray()->all();
复制代码
这里的连表中主表个字表的关系是一对多,打出的,写成原生sql:
  1. SELECT `a`.`ID`,`a`.`ROOM_NAME`,`a`.`PARENT_ROOM_TYPE`
  2. FROM `opera_hotel_room` `a`
  3. LEFT JOIN `run_hotel` `b` ON `a`.`HOTEL_ID` = `b`.`HOTEL_ID` AND `a`.`PARENT_ROOM_TYPE` = `b`.`BASE_ROOM_TYPE`
  4. WHERE `a`.`HOTEL_ID` = 197
复制代码

原生sql查到的结果:

                               
登录/注册后可看大图
但是AR查到的结果(只有13条):

                               
登录/注册后可看大图
自己观察下数据,就发现,将sql查出来的数据group by ID(ID是表的主键)后就得到了上面的13条记录,即,应AR连表查询的时候,会出现主键覆盖情况,
解决方案:
在select的时候,将主键select出来,并且起个新的字段名称,再查,就会发现,所有的数据都有了


                               
登录/注册后可看大图

以上。

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆



Archiver|  

662p开源网. Powered by Niuzen

© 2001-2014 Niuzen Inc.

返回顶部