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

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

Метод count класса ServiceEntityRepository возвращает целое число - количество записей в таблице, которые удовлетворяют переданным условиям. Первым параметром передаётся массив критериев отбора criteria, где ключ - имя поля сущности, а значение - требуемое значение этого поля. Метод удобен, когда нужно узнать лишь число строк, не загружая сами объекты из базы данных.

Синтаксис

public function count(array $criteria = []): int

Пример

Давайте посчитаем общее количество статей в таблице. Сначала создадим сущность Article:

<?php namespace AppEntity; use AppRepositoryArticleRepository; use DoctrineORMMapping as ORM; #[ORMEntity(repositoryClass: ArticleRepository::class)] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn] private ?int $id = null; #[ORMColumn(length: 255)] private ?string $title = null; #[ORMColumn(type: 'text')] private ?string $text = null; public function getId(): ?int { return $this->id; } public function getTitle(): ?string { return $this->title; } public function setTitle(string $title): static { $this->title = $title; return $this; } public function getText(): ?string { return $this->text; } public function setText(string $text): static { $this->text = $text; return $this; } } ?>

Теперь создадим репозиторий ArticleRepository:

<?php namespace AppRepository; use AppEntityArticle; use DoctrineBundleDoctrineBundleRepositoryServiceEntityRepository; use DoctrinePersistenceManagerRegistry; class ArticleRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Article::class); } } ?>

Вызовем метод count в контроллере, чтобы получить общее число статей:

<?php namespace AppController; use AppRepositoryArticleRepository; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/count', name: 'article_count')] public function count(ArticleRepository $repository): Response { $res = $repository->count([]); return new Response($res); } } ?>

Результат выполнения кода при наличии трёх статей:

"3"

Пример

Давайте посчитаем количество статей с определённым заголовком, передав критерий отбора:

<?php namespace AppController; use AppRepositoryArticleRepository; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/count/title', name: 'article_count_title')] public function countByTitle(ArticleRepository $repository): Response { $res = $repository->count(['title' => 'abcde']); return new Response($res); } } ?>

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

"2"

Пример

Давайте посчитаем количество статей, у которых одновременно совпадают заголовок и текст:

<?php namespace AppController; use AppRepositoryArticleRepository; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/count/both', name: 'article_count_both')] public function countByBoth(ArticleRepository $repository): Response { $res = $repository->count([ 'title' => 'abcde', 'text' => 'hello', ]); return new Response($res); } } ?>

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

"0"

Пример

Давайте получим все статьи и посчитаем их количество через метод count, сравнив с результатом метода findAll:

<?php namespace AppController; use AppRepositoryArticleRepository; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/compare', name: 'article_compare')] public function compare(ArticleRepository $repository): Response { $count = $repository->count([]); $all = $repository->findAll(); $res = count($all) === $count ? 'equal' : 'different'; return new Response($res); } } ?>

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

"equal"

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

  • класс ServiceEntityRepository,
    который является базовым классом репозитория
  • метод findAll,
    который возвращает все записи таблицы
  • метод findBy,
    который возвращает записи по критериям отбора
  • метод matching,
    который возвращает записи по критериям с сортировкой и лимитом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить