Doctrine resultsetmapping应该返回数组

时间:2017-03-10 17:13:42

标签: php doctrine-orm

我有这个问题:

select count(*) as total_count, sum(total) as total_value, status from invoice group by status;

当我在数据库中执行它时,我得到以下内容:

enter image description here

我想使用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)

2 个答案:

答案 0 :(得分:0)

您应该使用:

$result = $query->getScalarResult();

而不是:

$result = $query->getResult();

希望这个帮助

答案 1 :(得分:0)

因为您正在使用getResult doctrine将尝试为您获取所有匹配的行。如果您不希望结果是数组数组,则需要使用Doctrine的getSingleResult

所以对你来说简单:

$result = $query->getSingleResult();

如果返回更多或没有结果,您还可以限制投掷QueryException的结果数量:

$query->setMaxResults(1);