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

Атрибут JoinColumns

Атрибут JoinColumns вешается на свойство сущности и позволяет объединить несколько атрибутов JoinColumn в один составной внешний ключ. Это нужно, когда связанная сущность идентифицируется не одним полем, а несколькими. Внутри передаётся массив атрибутов JoinColumn, каждый из которых описывает одну колонку внешнего ключа.

Синтаксис

#[JoinColumns([ new JoinColumn(name: name, referencedColumnName: refName), new JoinColumn(name: name2, referencedColumnName: refName2) ])]

Пример

Давайте свяжем сущность Article с сущностью User по составному ключу из двух колонок:

<?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: User::class)] #[ORMJoinColumns([ new ORMJoinColumn( name: 'user_id', referencedColumnName: 'id' ), new ORMJoinColumn( name: 'user_type', referencedColumnName: 'type' ) ])] private ?User $user = null; } ?>

Пример

Теперь опишем сущность User с составным первичным ключом:

<?php namespace AppEntity; use DoctrineORMMapping as ORM; #[ORMEntity] class User { #[ORMId] #[ORMColumn(type: 'integer')] private int $id; #[ORMId] #[ORMColumn(type: 'string', length: 50)] private string $type; #[ORMColumn(type: 'string', length: 255)] private string $name = ''; public function getId(): int { return $this->id; } public function getType(): string { return $this->type; } public function getName(): string { return $this->name; } } ?>

Пример

Давайте создадим статью и привяжем её к пользователю:

<?php namespace AppController; use AppEntityArticle; use AppEntityUser; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/create', name: 'article_create')] public function create(EntityManagerInterface $em): Response { $user = new User(); $user->setId(1); $user->setType('admin'); $user->setName('abcde'); $article = new Article(); $article->setTitle('article'); $article->setUser($user); $em->persist($user); $em->persist($article); $em->flush(); return new Response('created'); } } ?>

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

"created"

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

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