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

Метод findBy

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

Синтаксис

<?php public function findBy(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array ?>

Пример

Давайте найдём все статьи с полем status равным 'active'. Сначала создадим сущность 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(length: 255)] private ?string $status = 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 getStatus(): ?string { return $this->status; } public function setStatus(string $status): static { $this->status = $status; 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); } } ?>

Теперь вызовем метод findBy в контроллере:

<?php namespace AppController; use AppRepositoryArticleRepository; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/articles', name: 'article_list')] public function list(ArticleRepository $repo): Response { $res = $repo->findBy(['status' => 'active']); $titles = []; foreach ($res as $article) { $titles[] = $article->getTitle(); } return new Response(implode(', ', $titles)); } } ?>

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

"article 1, article 2"

Пример

Давайте найдём статьи с сортировкой по полю title по возрастанию:

<?php namespace AppController; use AppRepositoryArticleRepository; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/articles/sorted', name: 'article_sorted')] public function sorted(ArticleRepository $repo): Response { $res = $repo->findBy(['status' => 'active'], ['title' => 'ASC']); $titles = []; foreach ($res as $article) { $titles[] = $article->getTitle(); } return new Response(implode(', ', $titles)); } } ?>

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

"article 1, article 2, article 3"

Пример

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

<?php namespace AppController; use AppRepositoryArticleRepository; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/articles/limited', name: 'article_limited')] public function limited(ArticleRepository $repo): Response { $res = $repo->findBy(['status' => 'active'], null, 2, 1); $titles = []; foreach ($res as $article) { $titles[] = $article->getTitle(); } return new Response(implode(', ', $titles)); } } ?>

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

"article 2, article 3"

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

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