DQL和等效SQL不返回相同数量的结果集

时间:2014-07-17 20:27:29

标签: mysql doctrine-orm doctrine dql doctrine-query

这是我的运行代码的学说查询:

        $queryString = "SELECT ct, count(ct.id), IDENTITY(a.service) "
                        . "FROM ConnectionTriple ct "
                        . "JOIN ct.account_connection ac "
                        . "JOIN Account a WITH (a = ac.account_1 OR a = ac.account_2) "
                        . "GROUP BY a.service, ct.property, ct.value";
        $query = $em->createQuery($queryString);
        //echo $query->getSQL();
        $results = $query->getResult();
        echo count($results);

上面的代码返回2个结果(截屏下方的最后两个)而不是4个(预期的)。但是,当我在phpmyadmin上运行等效的SQL(由$ query-> getSQL()获取)时,它会返回预期的4行,如下所示:

等效SQL查询:

SELECT u0_.id AS id0, u0_.value AS value1, u0_.status AS status2, u0_.flag AS flag3, count(u0_.id) AS sclr4, u1_.service_id AS sclr5, u0_.property_id AS property_id6, u0_.account_connection_id AS account_connection_id7 FROM usc_connection_triple u0_ INNER JOIN usc_account_connection u2_ ON u0_.account_connection_id = u2_.id AND (u2_.status = 1) INNER JOIN usc_service_subscriber u1_ ON ((u1_.id = u2_.account_1_id OR u1_.id = u2_.account_2_id)) WHERE (u0_.status = 1) AND (u1_.status = 1) GROUP BY u1_.service_id, u0_.property_id, u0_.value 

PHPMyAdmin结果:

enter image description here

所以,我想,我猜,结果有些错误可以通过学说反对水合作用。任何人都知道为什么会出现这种情况/可能的解决方案?

我的学说版本是:

"doctrine/dbal": "2.3.2",
"doctrine/orm": "2.3.2",

更新:我确定水合问题。因为,我尝试使用单个柱检索和使用标量水合作用:

$results = $query->getResult(\Doctrine\ORM\Query::HYDRATE_SCALAR);

这完美地回归了。这是预期的行数,4和数据。

1 个答案:

答案 0 :(得分:0)

我会说这是完全正常的。

正如你指出的那样,学说(默认)水化模式会将结果集表示为对象图。

对象图总是有一个根对象(在你的情况下是ConnectionTriple ct)。 结果集中有2个ct(id为1和2)。 Doctrine对象保湿器将足够智能返回你和阵列 2个ConnectionTriple对象,每行包含相关数据。

标量水合器,howerver将简单地返回原始结果集,而不从中构建图形。