0

我有以下 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();

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

谢谢!

PS 是的,我知道这个简单的查询不需要 createNativeQuery,但是我的真实查询对于 QueryBuilder 或 DQL 来说太复杂了,我已经对其进行了简化以查看问题是否出在查询上。它不是。

4

1 回答 1

0

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

您可以通过查看自己来查看ArrayHydrator->_isSimpleQuery

于 2013-10-29T00:08:06.233 回答