Доктрина 2 Как мне добавить запись в объединяющую таблицу, которая не имеет сущности? - PullRequest
1 голос
/ 19 марта 2011

Трудно обернуть голову вокруг этого. У меня есть сущность Page и ключевое слово. Я создал переменную-член под названием $ Keywords в моей сущности Page, которая имеет ассоциацию ManyToMany, которая создает таблицу соединений с именем "pages_keywords". В моем приложении я хочу дать возможность добавить ключевое слово на страницу. Как мне добавить эту запись в базу данных?

Я могу получить доступ к переменной-члену сущности $ Page $, но я не уверен, куда идти дальше. Я вижу, что реализация ArrayCollection в Doctrine имеет метод add (), который просто принимает значение. Могу ли я просто передать ему идентификатор сущности Keyword, и это создаст запись для меня?

Ответы [ 2 ]

4 голосов
/ 21 марта 2011

Предполагая, что вы знаете значение первичного ключа сущности, с которой вы хотите связать его (в вашем примере, $ keywordId), лучший способ сделать это - получить ссылку на сущность. Это дает вам ссылку без выполнения поиска в базе данных для связанной сущности.

Недостатком решения, которое вы разместили в своем последующем ответе, является необходимость дополнительной поездки в базу данных для получения записи ключевого слова. Получение его в качестве ссылки означает, что нет дополнительного поиска в базе данных:

<?php

// assumes $this->em is already defined as the Doctrine2 EntityManager
$page = $this->em->getRepository('App\Entity\Page')->find($pageId);

// associate $keyword with $page via a reference to the keywordId
$keyword = $this->em->getReference('App\Entity\Keyword', $keywordId);
$page->getKeywords()->add($keyword);
$em->flush();
1 голос
/ 19 марта 2011

Кажется, я почему-то отвечаю на многие свои вопросы.:)

Понял это.Я просто беру свой объект Page и объект Keyword, который хочу добавить на страницу, затем получаю ключевые слова и использую метод add (), передавая объект ключевого слова.

// Assuming you have an instance of the Entity Manager
$page = $this->em->getRepository('App\Entity\Page')->find($pageId);
$keyword= $this->em->getRepository('App\Entity\Keyword')->find($keywordId);
$page->getKeywords()->add($keyword);
$em->persist($page);
$em->flush();    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...