Doctrine GroupBy中的意外结果

时间:2016-02-10 12:41:09

标签: doctrine-orm symfony

我有以下存储库:

$qb = $this->getEntityManager()->createQueryBuilder();
$qb
    ->select('r')
    ->from('MyBundle:Rating', 'r')
    ->groupBy('r.year');

$result = $qb->getQuery()->execute();
return $result;

在控制器中执行转储:

array(2) {
    [0]=>
  object(My\Entity\Rating)#553 (5) {
  ["id":protected]=>
    int(2)
    ["index":protected]=>
    int(1)
    ["year":protected]=>
    int(2010)
    ["percentage":protected]=>
    float(2.5)
  }
  [1]=>
  object(My\Entity\Rating)#550 (5) {
  ["id":protected]=>
    int(1)
    ["index":protected]=>
    int(1)
    ["year":protected]=>
    int(2016)
    ["percentage":protected]=>
    float(0)
  }
}
  1. 我期待一个以年份为索引的数组,其值是与年份匹配的对象数组,是不是应该如此?
  2. db中有大约10条记录。一些如何只有这两个出现。仅输入两个不同年份的记录,这可能是仅有两个记录的原因。有人知道为什么吗?
  3. 我如何满足1的期望?

1 个答案:

答案 0 :(得分:0)

Doctrine默认提供对象。如果您想获得包含结果数据的数组,可以使用

$result = $qb->getQuery()->execute(null, Query::HYDRATE_ARRAY);

您需要包含Doctrine \ ORM \ Query,或者只使用

$result = $qb->getQuery()->getArrayResult();

您只获得有关这两年的数据的原因是

->groupBy('r.year');

消除了重复的条目。如果没有它,你将得到它们。