【问题标题】:Doctrine resultsetmapping should return array教义结果集映射应该返回数组
【发布时间】:2017-03-10 17:13:42
【问题描述】:

我有这个问题:

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)

【问题讨论】:

  • 试试$query->getResult(AbstractQuery::HYDRATE_SINGLE_SCALAR);
  • @Matteo 给了我The query returned a row containing multiple columns. Change the query or use a different result function like getScalarResult().
  • 我认为教义为您获取了多行。试试getSingleResult()。见the docs

标签: php doctrine-orm


【解决方案1】:

你应该使用:

$result = $query->getScalarResult();

而不是:

$result = $query->getResult();

希望有帮助

【讨论】:

    【解决方案2】:

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

    所以对你来说很简单:

    $result = $query->getSingleResult();
    

    如果返回更多或没有返回,您还可以限制结果数以抛出 QueryException

    $query->setMaxResults(1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多