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

Атрибут InverseJoinColumn

Атрибут InverseJoinColumn используется внутри атрибута JoinTable для связи ManyToMany. Он описывает колонку в промежуточной таблице, которая ссылается на обратную (inverse) сущность связи. Первым параметром передаётся имя колонки в промежуточной таблице, вторым - имя колонки, на которую ссылается внешний ключ.

Синтаксис

#[InverseJoinColumn(name, referencedColumnName, nullable, onDelete, unique)]

Пример

Давайте свяжем сущности Article и Tag отношением ManyToMany и укажем колонку обратной стороны через InverseJoinColumn:

<?php namespace App\Entity; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] class Article { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\Column(length: 255)] private ?string $title = null; #[ORM\ManyToMany(targetEntity: Tag::class)] #[ORM\JoinTable(name: 'article_tag')] #[ORM\JoinColumn(name: 'article_id', referencedColumnName: 'id')] #[ORM\InverseJoinColumn(name: 'tag_id', referencedColumnName: 'id')] private Collection $tags; public function __construct() { $this->tags = new ArrayCollection(); } 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 getTags(): Collection { return $this->tags; } } ?>

В промежуточной таблице article_tag появятся две колонки: article_id (задаётся через JoinColumn) и tag_id (задаётся через InverseJoinColumn).

Пример

Давайте добавим тег к статье и выведем его название:

<?php namespace App\Controller; use App\Entity\Article; use App\Entity\Tag; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article', name: 'article_create')] public function create(EntityManagerInterface $em): Response { $article = new Article(); $article->setTitle('hello'); $tag = new Tag(); $tag->setName('abcde'); $article->getTags()->add($tag); $em->persist($article); $em->persist($tag); $em->flush(); return new Response($article->getTags()->first()->getName()); } } ?>

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

"abcde"

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

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