Параметр 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