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

Метод matching

Метод matching класса ServiceEntityRepository выполняет поиск сущностей по заданным критериям и возвращает результат в виде массива. Первым параметром передаётся массив критериев (пары 'поле' => 'значение'). Вторым параметром можно передать сортировку, а третьим - лимит и смещение для ограничения выборки. Метод является удобной альтернативой findBy, когда нужна дополнительная фильтрация на уровне запросов или нестандартная сортировка.

Синтаксис

public function matching(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array

Пример

Давайте найдём все статьи с полем status равным 'published':

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; class ArticleRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Article::class); } public function findPublished(): array { return $this->matching([ 'status' => 'published', ]); } } ?>

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

[ Article { id: 1, title: 'article 1', status: 'published' }, Article { id: 2, title: 'article 2', status: 'published' }, Article { id: 3, title: 'article 3', status: 'published' } ]

Пример

Давайте отсортируем результат по полю createdAt по убыванию:

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; class ArticleRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Article::class); } public function findLatestPublished(): array { return $this->matching( ['status' => 'published'], ['createdAt' => 'DESC'] ); } } ?>

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

[ Article { id: 3, title: 'article 3', status: 'published', createdAt: '2024-03-15' }, Article { id: 2, title: 'article 2', status: 'published', createdAt: '2024-02-10' }, Article { id: 1, title: 'article 1', status: 'published', createdAt: '2024-01-05' } ]

Пример

Давайте ограничим выборку тремя записями:

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; class ArticleRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Article::class); } public function findTopThree(): array { return $this->matching( ['status' => 'published'], ['createdAt' => 'DESC'], 3 ); } } ?>

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

[ Article { id: 3, title: 'article 3', status: 'published' }, Article { id: 2, title: 'article 2', status: 'published' }, Article { id: 1, title: 'article 1', status: 'published' } ]

Пример

Давайте найдём статьи с полем status равным 'published' и полем author равным 'user':

<?php namespace App\Repository; use App\Entity\Article; use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository; use Doctrine\Persistence\ManagerRegistry; class ArticleRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Article::class); } public function findByAuthor(): array { return $this->matching([ 'status' => 'published', 'author' => 'user', ]); } } ?>

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

[ Article { id: 1, title: 'article 1', status: 'published', author: 'user' }, Article { id: 2, title: 'article 2', status: 'published', author: 'user' } ]

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

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