我有这个问题:
select count(*) as total_count, sum(total) as total_value, status from invoice group by status;
当我在数据库中执行它时,我得到以下内容:
我想使用Doctrine2实现相同的功能,但以下代码只返回一行:
$rsm = new ResultSetMapping();
$rsm->addScalarResult('total_count', 'totalCount');
$rsm->addScalarResult('total_value', 'totalValue');
$rsm->addScalarResult('status', 'status');
$query = $this->getObjectManager()->createNativeQuery('
select count(*) as total_count, sum(total) as total_value, status from invoice group by status', $rsm);
$result = $query->getResult();
return $result;
这是上述结果:
array (size=1)
0 =>
array (size=3)
'totalCount' => string '1432' (length=1)
'totalValue' => string '55447.80999999999' (length=2)
'status' => string 'paid' (length=4)
答案 0 :(得分:0)
您应该使用:
$result = $query->getScalarResult();
而不是:
$result = $query->getResult();
希望这个帮助
答案 1 :(得分:0)
因为您正在使用getResult
doctrine将尝试为您获取所有匹配的行。如果您不希望结果是数组数组,则需要使用Doctrine的getSingleResult
。
所以对你来说简单:
$result = $query->getSingleResult();
如果返回更多或没有结果,您还可以限制投掷QueryException
的结果数量:
$query->setMaxResults(1);