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

Атрибут Embedded

Атрибут Embedded вешается на свойство сущности и сообщает Doctrine, что это свойство является встраиваемым объектом (embeddable). Значения полей такого объекта хранятся в той же таблице, что и поля основной сущности. Сам класс встраиваемого объекта помечается атрибутом Embeddable.

Синтаксис

#[Embedded]

Пример

Давайте создадим встраиваемый объект Address и встроим его в сущность User:

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Embeddable] class Address { #[ORM\Column(type: 'string', length: 255)] private string $city; #[ORM\Column(type: 'string', length: 255)] private string $street; } ?>
<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Embedded(class: Address::class)] private Address $address; ?>

Doctrine создаст в таблице user колонки address_city и address_street.

Пример

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

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Embedded(class: Address::class, columnPrefix: 'addr_')] private Address $address; ?>

Теперь колонки будут называться addr_city и addr_street.

Пример

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

<?php namespace App\Controller; use App\Entity\Address; use App\Entity\User; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; class UserController extends AbstractController { public function index(EntityManagerInterface $em): Response { $user = new User(); $user->setAddress(new Address('abcde', 'hello')); $em->persist($user); $em->flush(); return new Response($user->getAddress()->getCity()); } } ?>

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

"abcde"

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

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