通过Symfony2汇总Doctrine Group中每个用户的所有金额

时间:2016-06-01 08:20:42

标签: symfony doctrine-orm

我希望获得与用户相关的每笔金额的总和

这是我的原始代码

public function getUserForThisTask($projectId)
{
  $qb = $this->createQueryBuilder('t')
      ->select('t.createdby','t.totalhour')
      ->where('t.project = :project_id')
      ->setParameter('project_id', $projectId);
      return $qb->getQuery()
                ->getResult();
}

这将返回

  user     hours
  user1  = 20
  user2  = 30
  user1  = 3
  user1  = 4

现在我通过添加groupBy重构

  public function getUserForThisTask($projectId)
{
  $qb = $this->createQueryBuilder('t')
      ->select('t.createdby','t.totalhour')
      ->groupBy('t.createdby')
      ->where('t.project = :project_id')
      ->setParameter('project_id', $projectId);
      return $qb->getQuery()
                ->getResult();
}

现在这将是结果,如您所见,不包括与user1相关的一些值

user    hours
user1  =  20
user2 =  30

现在我希望这总计与每个用户相关的所有时间

user    hours
user1 = 27
user2 = 30

你会怎么做?

1 个答案:

答案 0 :(得分:2)

根据您当前的查询,如@qooplmao所述,您只拥有每个组的virt totalhour

你需要总结所有这些。因此,您的查询必须类似于:

  public function getUserForThisTask($projectId)
  {
    $qb = $this->createQueryBuilder('t')
        ->select('t.createdby','SUM(t.totalhour) AS TOTAL')
        ->groupBy('t.createdby')
        ->where('t.project = :project_id')
        ->setParameter('project_id', $projectId);
        return $qb->getQuery()
                  ->getResult();
  }