我有以下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来说太复杂了,我已经简化它以查看问题是否与查询有关。事实并非如此。
答案 0 :(得分:0)
ArrayHydrator
(由getArrayResult
使用)检查您的查询是否只有1个EntityResult映射,如果是,则即使在为该EntityResult别名设置了identifierMap之后它仍继续填充结果数组。无论出于何种原因,ObjectHydrator
(由getResult
使用)都不执行该检查,因此在设置第一个值后它会停止填充数组。
您可以通过查看ArrayHydrator->_isSimpleQuery