首页 > 解决方案 > 如何在 Symfony 中使用 sql 聚合 SUM

问题描述

从表 Invoice(id、invoice_id、produit、price)。

我正在尝试在 Symfony 中使用教义做这样的事情:

SELECT SUM(price) AS price_total
FROM Invoice
WHERE invoice_id = 1

这是我在 InvoiceRepository.php 中的请求:

 $qb = $this->_em->createQueryBuilder("i");
        $qb->select('SUM(i.price)')
            ->from('AppBundle:Invoice','i')
            ->where('i.invoice_id = :invoice')
            ->setParameter('invoice',$invoice);
        return $qb->getQuery()->getSingleScalarResult();

但是这个请求总是返回第一个值而不是总和。

有人知道怎么了?

标签: symfonydoctrinequery-builderdql

解决方案


要使用 SUM、AVG、COUNT 等聚合函数,您需要指定 GROUP BY 条件。像这样:

$qb = $this->_em->createQueryBuilder("i");
    $qb->select('SUM(i.price)')
        ->from('AppBundle:Invoice','i')
        ->where('i.invoice_id = :invoice')
        ->groupBy('i.invoice_id') //<- here
        ->setParameter('invoice',$invoice);
    return $qb->getQuery()->getSingleScalarResult();

推荐阅读