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

Атрибут AssociationOverride

Атрибут AssociationOverride применяется на уровне класса сущности и позволяет переопределить настройки ассоциации, унаследованной от родительской сущности или встроенного типа. Первым параметром передаётся имя ассоциации name. Через параметр joinColumns задаются новые колонки соединения, а через inversedBy и joinTable - обратная сторона и таблица связи.

Синтаксис

#[AssociationOverride( name: 'associationName', joinColumns: [ new JoinColumn(name: 'column_name', referencedColumnName: 'id') ], inversedBy: 'propertyName', joinTable: new JoinTable(name: 'join_table_name') )]

Пример

Давайте создадим базовую сущность Article с ассоциацией author, а в дочерней сущности FeaturedArticle переопределим колонку соединения:

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] class Article { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\Column(type: 'string')] private string $title; #[ORM\ManyToOne(targetEntity: User::class)] #[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id')] private ?User $author = null; } ?>

Теперь переопределим ассоциацию author в дочерней сущности FeaturedArticle, указав другую колонку соединения:

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\AssociationOverride( name: 'author', joinColumns: [ new ORM\JoinColumn(name: 'featured_author_id', referencedColumnName: 'id') ] )] class FeaturedArticle extends Article { #[ORM\Column(type: 'boolean')] private bool $featured = true; } ?>

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

[ 'featured_article' => [ 'id' => 'integer', 'title' => 'string', 'featured_author_id' => 'integer', 'featured' => 'boolean' ] ]

Пример

Давайте переопределим ассоциацию с помощью inversedBy и joinTable для связи многие-ко-многим:

<?php namespace App\Entity; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] class Tag { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\Column(type: 'string')] private string $name; #[ORM\ManyToMany(targetEntity: Article::class, mappedBy: 'tags')] private Collection $articles; } ?>

Теперь переопределим ассоциацию tags в дочерней сущности FeaturedArticle с новой таблицей соединения:

<?php namespace App\Entity; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\AssociationOverride( name: 'tags', inversedBy: 'featuredArticles', joinTable: new ORM\JoinTable(name: 'featured_article_tag') )] class FeaturedArticle extends Article { #[ORM\Column(type: 'boolean')] private bool $featured = true; } ?>

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

"featured_article_tag"

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

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