엔티티의 새로운 레코드를 만들려면 Symfony가 있습니다 News
. 속성 중 하나는 $newsArticle
이며 엔티티 NewsArticle
과 일대 다 관계가 있으며 뉴스 레코드의 번역본을 보유합니다. 양식에 새로운 News
레코드와 관련 NewsArticle
레코드 (표준 언어)를 한 번에 만들어야합니다. 관계가 @ORM 주석의 도움으로 올바르게 정의 이럴 :Symfony Form/Doctrine : 아직 보존되지 않은 엔티티의 외래 키 저장
class News {
// ...
/**
* @ORM\OneToMany(targetEntity="NewsArticle", mappedBy="news", cascade={"persist", "remove"})
*/
protected $newsArticle;
// ...
/**
* Add newsArticle
*
* @param \Acme\Bundle\Entity\NewsArticle $newsArticle
*
* @return News
*/
public function addNewsArticle(\Acme\Bundle\Entity\NewsArticle $newsArticle)
{
$this->newsArticle[] = $newsArticle;
return $this;
}
}
class NewsArticle {
// ...
/**
* @ORM\ManyToOne(targetEntity="News", inversedBy="newsArticle")
* @ORM\JoinColumn(name="news_id", referencedColumnName="id")
*/
private $news;
}
문제는 : 양식을 전송 한 후 뉴스와 NewsArticle 레코드가 생성되지만, 필드 news_id
에 값이 없습니다. (: 캐스 케이 딩 관계와 "역"쪽 저장 교리) 다 대다 관계를위한 솔루션 예 :
트릭을 나는 Symfony Docs에있는이 문제에 관해서는
각 "태그"에 단일 "작업"이 설정되어 있는지 확인하는 것입니다. 이 작업을 수행하는 쉬운 방법 중 하나는 by_reference가 false로 설정되어 있기 때문에 양식 유형이라고 addTag()에 몇 가지 추가 로직을 추가하는 것입니다
// src/AppBundle/Entity/Task.php // ... public function addTag(Tag $tag) { $tag->addTask($this); $this->tags->add($tag); }
태그 내부, 단지 수 있도록 당신이 addTask이 있는지 방법 : 당신은 단순히 addTag 내부에서 setTask를 호출 할 수있는 것을 제외하고는 일대 다 관계가있는 경우
// src/AppBundle/Entity/Tag.php // ... public function addTask(Task $task) { if (!$this->tasks->contains($task)) { $this->tasks->add($task); } }
는 다음 해결 방법은 유사한 입니다. 불행하게도이 오류 메시지가 발생 ...
public function addNewsArticle(\Acme\Bundle\Entity\NewsArticle $newsArticle) { $newsArticle->setNews($this); $this->newsArticle[] = $newsArticle; return $this; }
: 선택 필드에 전달
엔티티가 관리해야
따라서이 같은 내 코드를 확장했다. 엔티티 관리자에 을 지속 할 수 있습니까?
이 문제를 해결하는 방법을 모르겠다. 아무도 나에게 힌트를 줄 수 있니? 또는 아직 유지되지 않은 관련 엔터티를 만드는 더 나은 솔루션일까요?
미리 감사드립니다.
편집 : NewsController가 (발췌)
public function addAction(Request $request) {
$article = new NewsArticle();
$article->setLanguageId($lang);
$news = new News();
$news->setPublic(0);
$news->setDeleted(0);
$news->setIdent($hash);
$news->setRank($rank);
$news->addNewsArticle($article);
$form = $this->createForm(NewsType::class, $news, ['languageId' => $lang]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($news);
$em->flush();
$this->addFlash(
'success',
'Your changes were saved!'
);
}
return $this->render('AcmeBundle:News:add.html.twig', array(
'form' => $form->createView(),
'news' => $news,
));
}
동일한 요청으로 ID를 조작하려면 ID를 가져올 필요가 없습니다.Symfony와 Mongo를 사용하여 얻은 유일한 경험이 있습니다. 그 시점에서 참조로 사용할 수 있습니다. 계속 사용하기 전까지는 ID를 사용할 수 없습니다. – Simon