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

Метод find

Метод find класса EntityManager возвращает объект сущности, найденный по указанному идентификатору. Первым параметром передаётся имя класса сущности, вторым - значение первичного ключа. Если запись не найдена, метод возвращает null. Дополнительные параметры позволяют управлять блокировкой и гидратацией.

Синтаксис

public function find(string $className, mixed $id, int $lockMode = null, int $lockVersion = null): ?object

Пример

Давайте найдём сущность Article с идентификатором 1:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/find', name: 'article_find')] public function find(EntityManagerInterface $em): Response { $article = $em->find(Article::class, 1); if ($article === null) { return new Response('article not found'); } return new Response($article->getTitle()); } } ?>

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

"hello"

Пример

Давайте обработаем ситуацию, когда сущность не найдена:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/find-null', name: 'article_find_null')] public function findNull(EntityManagerInterface $em): Response { $article = $em->find(Article::class, 999); if ($article === null) { return new Response('article not found'); } return new Response($article->getTitle()); } } ?>

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

"article not found"

Пример

Давайте найдём сущность с блокировкой для последующего обновления:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use DoctrineDBALExceptionLockWaitTimeoutException; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/find-lock', name: 'article_find_lock')] public function findLock(EntityManagerInterface $em): Response { try { $article = $em->find(Article::class, 1, LockMode::PESSIMISTIC_WRITE); if ($article === null) { return new Response('article not found'); } return new Response($article->getTitle()); } catch (LockWaitTimeoutException $e) { return new Response('lock timeout'); } } } ?>

Результат выполнения кода при успешном захвате блокировки:

"hello"

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

  • класс EntityManager,
    который управляет сущностями и их состоянием
  • метод getRepository,
    который возвращает репозиторий для выборки записей
  • метод getReference,
    который возвращает прокси-объект без запроса к базе
  • метод refresh,
    который обновляет данные сущности из базы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить