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

Атрибут JoinColumn

Атрибут JoinColumn вешается на свойство сущности вместе с атрибутом ManyToOne или OneToOne и описывает столбец в таблице, который хранит внешний ключ. Первым параметром передаётся имя столбца в базе данных. Если атрибут не указан, Doctrine создаёт столбец автоматически по имени свойства и имени первичного ключа связанной сущности.

Синтаксис

#[JoinColumn( name: 'column_name', referencedColumnName: 'id', nullable: true, onDelete: 'CASCADE', unique: false )]

Пример

Давайте создадим сущность Article со связью ManyToOne на сущность User и укажем имя столбца внешнего ключа через атрибут JoinColumn:

<?php namespace AppEntity; use AppRepositoryArticleRepository; use DoctrineORMMapping as ORM; #[ORMEntity(repositoryClass: ArticleRepository::class)] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255)] private ?string $title = null; #[ORMManyToOne(targetEntity: User::class)] #[ORMJoinColumn(name: 'user_id', referencedColumnName: 'id')] private ?User $user = null; public function getId(): ?int { return $this->id; } public function getTitle(): ?string { return $this->title; } public function setTitle(string $title): static { $this->title = $title; return $this; } public function getUser(): ?User { return $this->user; } public function setUser(?User $user): static { $this->user = $user; return $this; } } ?>

После выполнения команды миграции в таблице article появится столбец user_id, который ссылается на столбец id таблицы user.

Пример

Давайте разрешим значение null во внешнем ключе и зададим поведение CASCADE при удалении связанной записи:

<?php namespace AppEntity; use AppRepositoryArticleRepository; use DoctrineORMMapping as ORM; #[ORMEntity(repositoryClass: ArticleRepository::class)] class Article { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'string', length: 255)] private ?string $title = null; #[ORMManyToOne(targetEntity: User::class)] #[ORMJoinColumn( name: 'user_id', referencedColumnName: 'id', nullable: true, onDelete: 'CASCADE' )] private ?User $user = null; public function getId(): ?int { return $this->id; } public function getTitle(): ?string { return $this->title; } public function setTitle(string $title): static { $this->title = $title; return $this; } public function getUser(): ?User { return $this->user; } public function setUser(?User $user): static { $this->user = $user; return $this; } } ?>

Теперь столбец user_id может хранить значение NULL, а при удалении пользователя все связанные с ним статьи также будут удалены.

Пример

Давайте сделаем связь OneToOne между сущностями User и Profile с уникальным внешним ключом:

<?php namespace AppEntity; use AppRepositoryProfileRepository; use DoctrineORMMapping as ORM; #[ORMEntity(repositoryClass: ProfileRepository::class)] class Profile { #[ORMId] #[ORMGeneratedValue] #[ORMColumn(type: 'integer')] private ?int $id = null; #[ORMColumn(type: 'text')] private ?string $bio = null; #[ORMOneToOne(targetEntity: User::class)] #[ORMJoinColumn( name: 'user_id', referencedColumnName: 'id', unique: true, nullable: false )] private ?User $user = null; public function getId(): ?int { return $this->id; } public function getBio(): ?string { return $this->bio; } public function setBio(string $bio): static { $this->bio = $bio; return $this; } public function getUser(): ?User { return $this->user; } public function setUser(?User $user): static { $this->user = $user; return $this; } } ?>

Благодаря параметру unique значение столбца user_id будет уникальным, что гарантирует связь «один к одному».

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

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