Метод sum
Метод sum класса Expr создаёт объект выражения, который вычисляет сумму значений указанного поля. Этот метод часто используется в конструкторе запросов Doctrine для получения агрегированных данных. Первым параметром передаётся строка с именем поля, по которому будет производиться суммирование.
Синтаксис
Expr::sum(string $field)
Пример
Давайте создадим запрос, который вычисляет сумму значений поля quantity для всех записей в таблице:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\ORM\Query\Expr;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function getTotalQuantity(): int
{
$expr = new Expr();
$qb = $this->createQueryBuilder('a');
$qb->select($expr->sum('a.quantity'));
return (int) $qb->getQuery()->getSingleScalarResult();
}
}
?>
Результат выполнения кода для набора данных:
150
Пример
Давайте используем метод sum вместе с условием where для фильтрации записей перед суммированием:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Doctrine\ORM\Query\Expr;
class ArticleRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Article::class);
}
public function getSumForActive(): int
{
$expr = new Expr();
$qb = $this->createQueryBuilder('a');
$qb->select($expr->sum('a.quantity'))
->where($expr->eq('a.active', true));
return (int) $qb->getQuery()->getSingleScalarResult();
}
}
?>
Результат выполнения кода:
75