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

Параметр name атрибута JoinColumn

Параметр name атрибута JoinColumn задаёт имя столбца внешнего ключа в таблице базы данных. Атрибут JoinColumn вешается на свойство сущности, которое ссылается на другую сущность. По умолчанию Doctrine сама формирует имя столбца по шаблону '<имя_свойства>_id', однако параметр name позволяет переопределить это имя явно.

Синтаксис

#[JoinColumn(name: 'column_name')]

Пример

Давайте создадим сущность Author и сущность Article, связанную с ней через ManyToOne. Укажем для внешнего ключа имя столбца 'author_id':

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] class Author { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255)] private string $name; public function getId(): ?int { return $this->id; } public function getName(): string { return $this->name; } public function setName(string $name): self { $this->name = $name; return $this; } } ?>
<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255)] private string $title; #[ORMManyToOne(targetEntity: Author::class)] #[ORMJoinColumn(name: 'author_id', referencedColumnName: 'id')] private ?Author $author = null; public function getId(): ?int { return $this->id; } public function getTitle(): string { return $this->title; } public function setTitle(string $title): self { $this->title = $title; return $this; } public function getAuthor(): ?Author { return $this->author; } public function setAuthor(?Author $author): self { $this->author = $author; return $this; } } ?>

В таблице article внешний ключ будет храниться в столбце 'author_id'.

Пример

Давайте сравним поведение без параметра name и с ним. Без указания имени Doctrine сформирует столбец автоматически:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMManyToOne(targetEntity: Author::class)] private ?Author $author = null; } ?>

В этом случае Doctrine создаст столбец с именем 'author_id' автоматически. Теперь укажем параметр name явно и переопределим имя столбца на 'writer_id':

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMManyToOne(targetEntity: Author::class)] #[ORMJoinColumn(name: 'writer_id', referencedColumnName: 'id')] private ?Author $author = null; } ?>

Теперь внешний ключ будет храниться в столбце 'writer_id' вместо 'author_id'.

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

  • атрибут JoinColumn,
    который настраивает столбец внешнего ключа
  • параметр referencedColumnName,
    который задаёт имя столбца, на который ссылается внешний ключ
  • параметр nullable,
    который определяет, допускает ли столбец значение NULL
  • связь ManyToOne,
    для которой чаще всего применяется атрибут JoinColumn
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить