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

Параметр targetEntity

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

Синтаксис

#[ManyToOne(targetEntity: Entity::class)]

Пример

Давайте создадим сущность Category и сущность Article, которая ссылается на категорию через targetEntity:

<?php namespace AppEntity; use AppRepositoryCategoryRepository; use DoctrineORMMapping as ORM; #[ORMEntity(repositoryClass: CategoryRepository::class)] class Category { #[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 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; #[ORMManyToOne(targetEntity: Category::class)] #[ORMJoinColumn(nullable: false)] private ?Category $category = 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 getCategory(): ?Category { return $this->category; } public function setCategory(?Category $category): self { $this->category = $category; return $this; } } ?>

Теперь при создании статьи мы можем указать категорию, и Doctrine сохранит внешний ключ в таблице статей:

<?php namespace AppController; use AppEntityArticle; use AppEntityCategory; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/create', name: 'article_create')] public function create(EntityManagerInterface $em): Response { $category = new Category(); $category->setName('abcde'); $article = new Article(); $article->setTitle('hello'); $article->setCategory($category); $em->persist($category); $em->persist($article); $em->flush(); return new Response('article saved'); } } ?>

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

"article saved"

Пример

Давайте получим статью вместе с её категорией через репозиторий:

<?php namespace AppController; use AppEntityArticle; use DoctrineORMEntityManagerInterface; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; class ArticleController extends AbstractController { #[Route('/article/show/{id}', name: 'article_show')] public function show(int $id, EntityManagerInterface $em): Response { $article = $em->getRepository(Article::class)->find($id); return new Response($article->getCategory()->getName()); } } ?>

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

"abcde"

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

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