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

Атрибут MappedSuperclass

Атрибут MappedSuperclass вешается на класс, который не является сущностью, но содержит общие поля и методы для других сущностей. Дочерние классы наследуют эти поля, и они становятся частью их таблиц в базе данных. Сам родительский класс не может быть сущностью и не имеет своей таблицы.

Синтаксис

#[MappedSuperclass] class ClassName { // common fields and methods }

Пример

Давайте создадим родительский класс с общими полями id, createdAt и updatedAt:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORM\MappedSuperclass] abstract class BaseEntity { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column(type: 'integer')] protected int $id; #[ORM\Column(type: 'datetime')] protected DateTimeInterface $createdAt; #[ORM\Column(type: 'datetime', nullable: true)] protected ?DateTimeInterface $updatedAt = null; public function getId(): int { return $this->id; } public function getCreatedAt(): DateTimeInterface { return $this->createdAt; } public function setCreatedAt(DateTimeInterface $createdAt): self { $this->createdAt = $createdAt; return $this; } } ?>

Теперь создадим сущность Article, которая наследует поля от BaseEntity:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORM\Entity] #[ORM\Table(name: 'articles')] class Article extends BaseEntity { #[ORM\Column(type: 'string', length: 255)] private string $title; #[ORM\Column(type: 'text')] private string $content; public function getTitle(): string { return $this->title; } public function setTitle(string $title): self { $this->title = $title; return $this; } public function getContent(): string { return $this->content; } public function setContent(string $content): self { $this->content = $content; return $this; } } ?>

Пример

Давайте создадим ещё одну сущность User, которая также наследует BaseEntity:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORM\Entity] #[ORM\Table(name: 'users')] class User extends BaseEntity { #[ORM\Column(type: 'string', length: 255)] private string $name; #[ORM\Column(type: 'boolean')] private bool $active = true; public function getName(): string { return $this->name; } public function setName(string $name): self { $this->name = $name; return $this; } public function isActive(): bool { return $this->active; } public function setActive(bool $active): self { $this->active = $active; return $this; } } ?>

Пример

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

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article', name: 'article_create')] public function create(EntityManagerInterface $em): Response { $article = new Article(); $article->setTitle('abcde'); $article->setContent('hello'); $article->setCreatedAt(new DateTime()); $em->persist($article); $em->flush(); return new Response( 'ID: ' . $article->getId() . ', ' . 'Title: ' . $article->getTitle() ); } } ?>

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

"ID: 1, Title: abcde"

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

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