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

Атрибут Embeddable

Атрибут Embeddable вешается на класс, который не является сущностью, но содержит набор полей для повторного использования. Такой класс встраивается в сущность через атрибут Embedded. Это позволяет избежать дублирования кода при описании одинаковых полей в разных сущностях.

Синтаксис

#[Embeddable] class Address { // fields }

Пример

Давайте создадим встраиваемый класс Address с полями для хранения адреса:

<?php namespace AppEmbeddable; use DoctrineORMMapping as ORM; #[ORMEmbeddable] class Address { #[ORMColumn(type: 'string', length: 255)] private string $city; #[ORMColumn(type: 'string', length: 255)] private string $street; #[ORMColumn(type: 'string', length: 20)] private string $zip; public function getCity(): string { return $this->city; } public function setCity(string $city): void { $this->city = $city; } public function getStreet(): string { return $this->street; } public function setStreet(string $street): void { $this->street = $street; } public function getZip(): string { return $this->zip; } public function setZip(string $zip): void { $this->zip = $zip; } } ?>

Пример

Теперь встроим класс Address в сущность User через атрибут Embedded:

<?php namespace AppEntity; use AppEmbeddableAddress; use DoctrineORMMapping as ORM; #[ORMEntity] #[ORMTable(name: 'users')] class User { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private int $id; #[ORMColumn(type: 'string', length: 255)] private string $name; #[ORMEmbedded(class: Address::class)] private Address $address; public function getId(): int { return $this->id; } public function getName(): string { return $this->name; } public function setName(string $name): void { $this->name = $name; } public function getAddress(): Address { return $this->address; } public function setAddress(Address $address): void { $this->address = $address; } } ?>

Пример

Давайте создадим объект User, заполним встроенный адрес и выведем данные:

<?php use AppEntityUser; use AppEmbeddableAddress; $address = new Address(); $address->setCity('abcde'); $address->setStreet('article'); $address->setZip('12345'); $user = new User(); $user->setName('hello'); $user->setAddress($address); echo $user->getName() . ' - ' . $user->getAddress()->getCity(); ?>

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

"hello - abcde"

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

  • атрибут Embedded,
    который встраивает объект в сущность
  • атрибут JoinColumn,
    который задаёт колонку для связи
  • атрибут OneToOne,
    который задаёт связь один-к-одному
  • атрибут ManyToOne,
    который задаёт связь многие-к-одному
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить