当存在更多时,Doctrine2 createNativeQuery返回一个具有一个结果的对象

时间:2013-04-05 11:39:38

标签: doctrine-orm

我有以下Doctrine2代码:

$sql = 'SELECT user_name, user_email FROM users';

$rsm = new ResultSetMapping();
$rsm->addEntityResult('Entity\Users', 'u');
$rsm->addFieldResult('u', 'user_name', 'userName');
$rsm->addFieldResult('u', 'user_email', 'userEmail');

$query = $this->em->createNativeQuery($sql, $rsm);
$users = $query->getResult();

返回第一个用户的1个项目的数组。但是,如果我将其更改为

$users = $query->getArrayResult();

按预期返回完整的用户组。谁能看到这里有什么问题?

谢谢!

P.S。 是的,我知道这个简单的查询不需要createNativeQuery,但我的真实查询对于QueryBuilder或DQL来说太复杂了,我已经简化它以查看问题是否与查询有关。事实并非如此。

1 个答案:

答案 0 :(得分:0)

ArrayHydrator(由getArrayResult使用)检查您的查询是否只有1个EntityResult映射,如果是,则即使在为该EntityResult别名设置了identifierMap之后它仍继续填充结果数组。无论出于何种原因,ObjectHydrator(由getResult使用)都不执行该检查,因此在设置第一个值后它会停止填充数组。

您可以通过查看ArrayHydrator->_isSimpleQuery

自行查看