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

Класс EntityManager

Класс EntityManager является центральным объектом Doctrine ORM в Symfony. Он отвечает за сохранение, удаление, поиск и обновление сущностей, а также управляет состоянием объектов в Unit of Work. Экземпляр EntityManager доступен в контроллерах через сервис doctrine.orm.entity_manager или через автоинъекцию EntityManagerInterface.

Основные возможности: persist - планирует сохранение сущности, flush - синхронизирует изменения с базой данных, remove - помечает сущность на удаление, find - ищет сущность по первичному ключу, getRepository - возвращает репозиторий сущности.

Синтаксис

use Doctrine\ORM\EntityManagerInterface; public function index(EntityManagerInterface $em): Response { // работа с EntityManager }

Пример

Давайте получим EntityManager через автоинъекцию и создадим новую сущность:

<?php namespace App\Controller; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/create', name: 'article_create')] public function create(EntityManagerInterface $em): Response { $article = new Article(); $article->setTitle('abcde'); $article->setText('article text'); $em->persist($article); $em->flush(); return new Response('saved'); } } ?>

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

"saved"

Пример

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

<?php namespace App\Controller; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/update/{id}', name: 'article_update')] public function update(int $id, EntityManagerInterface $em): Response { $article = $em->find(Article::class, $id); if (!$article) { return new Response('not found'); } $article->setTitle('hello'); $em->flush(); return new Response($article->getTitle()); } } ?>

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

"hello"

Пример

Давайте удалим сущность через remove и flush:

<?php namespace App\Controller; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/delete/{id}', name: 'article_delete')] public function delete(int $id, EntityManagerInterface $em): Response { $article = $em->find(Article::class, $id); if (!$article) { return new Response('not found'); } $em->remove($article); $em->flush(); return new Response('deleted'); } } ?>

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

"deleted"

Пример

Давайте получим репозиторий сущности и найдём все записи:

<?php namespace App\Controller; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/all', name: 'article_all')] public function all(EntityManagerInterface $em): Response { $repository = $em->getRepository(Article::class); $articles = $repository->findAll(); $titles = []; foreach ($articles as $article) { $titles[] = $article->getTitle(); } return new Response(implode(', ', $titles)); } } ?>

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

"article 1, article 2, article 3"

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

  • метод persist,
    который планирует сохранение сущности
  • метод flush,
    который синхронизирует изменения с базой данных
  • метод remove,
    который помечает сущность на удаление
  • метод getRepository,
    который возвращает репозиторий сущности
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить