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

Атрибут Entity

Атрибут Entity вешается на класс и превращает его в сущность Doctrine, связанную с таблицей базы данных. Параметры repositoryClass и readOnly позволяют задать репозиторий и режим только для чтения соответственно.

Синтаксис

#[Entity(repositoryClass: repository, readOnly: readOnly)]

Пример

Давайте создадим простую сущность для хранения статей:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORM\Entity] class Article { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] private int $id; #[ORM\Column(type: 'string')] private string $title; public function getId(): int { return $this->id; } public function getTitle(): string { return $this->title; } public function setTitle(string $title): void { $this->title = $title; } } ?>

Теперь сущность можно сохранить через менеджер сущностей:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function create(EntityManagerInterface $em): Response { $article = new Article(); $article->setTitle('hello'); $em->persist($article); $em->flush(); return new Response('created'); } } ?>

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

created

Пример

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

<?php namespace AppEntity; use AppRepositoryArticleRepository; use DoctrineORMMapping as ORM; #[ORM\Entity(repositoryClass: ArticleRepository::class)] class Article { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] private int $id; #[ORM\Column(type: 'string')] private string $title; } ?>

Теперь можно получить репозиторий и найти все записи:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; class ArticleController extends AbstractController { public function list(EntityManagerInterface $em): Response { $repository = $em->getRepository(Article::class); $articles = $repository->findAll(); return new Response(count($articles)); } } ?>

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

0

Пример

Давайте включим режим только для чтения через параметр readOnly:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORM\Entity(readOnly: true)] class Article { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] private int $id; #[ORM\Column(type: 'string')] private string $title; } ?>

При попытке изменить такую сущность Doctrine выбросит исключение:

ReadOnlyException: Entity AppEntityArticle is read-only

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

  • атрибут Table,
    который задаёт имя таблицы для сущности
  • атрибут Id,
    который помечает поле первичным ключом
  • атрибут GeneratedValue,
    который включает автогенерацию значения поля
  • атрибут Cache,
    который настраивает кеширование запросов сущности
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить