这是我的运行代码的学说查询:
$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结果:
所以,我想,我猜,结果有些错误可以通过学说反对水合作用。任何人都知道为什么会出现这种情况/可能的解决方案?
我的学说版本是:
"doctrine/dbal": "2.3.2",
"doctrine/orm": "2.3.2",
更新:我确定水合问题。因为,我尝试使用单个柱检索和使用标量水合作用:
$results = $query->getResult(\Doctrine\ORM\Query::HYDRATE_SCALAR);
这完美地回归了。这是预期的行数,4和数据。
答案 0 :(得分:0)
我会说这是完全正常的。
正如你指出的那样,学说(默认)水化模式会将结果集表示为对象图。
对象图总是有一个根对象(在你的情况下是ConnectionTriple ct
)。
结果集中有2个ct(id为1和2)。
Doctrine对象保湿器将足够智能返回你和阵列
2个ConnectionTriple对象,每行包含相关数据。
标量水合器,howerver将简单地返回原始结果集,而不从中构建图形。