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

Атрибут AttributeOverride

Атрибут AttributeOverride используется вместе с атрибутом AttributeOverrides и вешается на класс сущности-наследника. Он переопределяет параметры поля, унаследованного от родительской сущности или от MappedSuperclass. Первым параметром передаётся имя поля, а именованными параметрами задаются новые настройки: name, type, length, nullable, unique, column и другие.

Синтаксис

#[AttributeOverride(name: field, column: new Column(name: 'column_name'))]

Пример

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

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORM\MappedSuperclass] class BaseArticle { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] protected ?int $id = null; #[ORM\Column(type: 'string', length: 255)] protected string $title = ''; 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; } } ?>

Теперь создадим наследника и переопределим поле title:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORM\Entity] #[ORM\AttributeOverrides([ new ORM\AttributeOverride( name: 'title', column: new ORM\Column(name: 'article_title', type: 'text') ) ])] class Article extends BaseArticle { } ?>

В итоге поле title будет храниться в колонке article_title с типом text.

Пример

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

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORM\MappedSuperclass] class BaseUser { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] protected ?int $id = null; #[ORM\Column(type: 'string', length: 255)] protected string $name = ''; #[ORM\Column(type: 'string', length: 255, unique: true)] protected string $email = ''; } ?>

Переопределим оба поля в наследнике:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORM\Entity] #[ORM\AttributeOverrides([ new ORM\AttributeOverride( name: 'name', column: new ORM\Column(name: 'admin_name', type: 'string', length: 100) ), new ORM\AttributeOverride( name: 'email', column: new ORM\Column(name: 'admin_email', type: 'string', length: 180, unique: false) ) ])] class Admin extends BaseUser { } ?>

Результат выполнения кода - колонки admin_name и admin_email в таблице сущности Admin:

["admin_name", "admin_email"]

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

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