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

    以上。

  • 相关阅读:
    php扩展开发函数
    python里面的引用
    apk的包名修改
    python3.3中print换行
    Project Euler Problem4
    Project Euler Problem5
    Project Euler Problem3
    通过电脑来访问手机站点——UserAgent和UserDataDir的应用
    LJX的校园:社会实践的任务
    连续和最大
  • 原文地址:https://www.cnblogs.com/Steven-shi/p/8245544.html
Copyright © 2011-2022 走看看