РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
92 of 258 menu

Метод count класса Expr

Метод count класса Expr создаёт выражение для подсчёта количества элементов в коллекции или массиве. Он применяется при построении DQL-запросов через QueryBuilder. В качестве первого параметра передаётся выражение, которое нужно подсчитать. Второй параметр задаёт тип подсчёта. Метод возвращает строку с DQL-выражением, которую можно использовать в методах select, where и других.

Синтаксис

$expr->count($field, $distinct = false)

Пример

Давайте подсчитаем количество записей в таблице через QueryBuilder:

<?php namespace App\Controller; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): Response { $qb = $em->createQueryBuilder(); $qb->select($qb->expr()->count('a.id')) ->from(Article::class, 'a'); $res = $qb->getQuery()->getSingleScalarResult(); return new Response((string) $res); } } ?>

Результат выполнения кода:

"5"

Пример

Давайте подсчитаем количество уникальных значений поля title, передав второй параметр true:

<?php namespace App\Controller; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): Response { $qb = $em->createQueryBuilder(); $qb->select($qb->expr()->count('a.title', true)) ->from(Article::class, 'a'); $res = $qb->getQuery()->getSingleScalarResult(); return new Response((string) $res); } } ?>

Результат выполнения кода:

"3"

Пример

Давайте используем метод count вместе с группировкой для подсчёта записей по каждому значению поля:

<?php namespace App\Controller; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class ArticleController extends AbstractController { public function index(EntityManagerInterface $em): Response { $qb = $em->createQueryBuilder(); $qb->select('a.status', $qb->expr()->count('a.id')) ->from(Article::class, 'a') ->groupBy('a.status'); $res = $qb->getQuery()->getResult(); return new Response(json_encode($res)); } } ?>

Результат выполнения кода:

[{"status": "active", "1": "3"}, {"status": "draft", "1": "2"}]

Смотрите также

  • класс Expr,
    который создаёт выражения для QueryBuilder
  • метод avg,
    который вычисляет среднее значение
  • метод sum,
    который вычисляет сумму значений
  • метод max,
    который находит максимальное значение
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить