간단한 블로그 게시물 시스템을 만들고 있습니다. 2 개의 엔티티 뉴스와 태그 만 있습니다.Doctrine : db에 존재하지 않는 경우 관련 개체 (태그)를 삽입하십시오.
뉴스와 태그 사이에 "manyToMany"관계를 만들었습니다. 내 DB에 뉴스를 추가 할 때
+------+----------+------+
| ID | news_id |tag_id|
+------+----------+------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
| 4 | 2 | 2 |
+------+----------+------+
의 관계가 잘 작동 :
교리는이 같은 내 소식과 내 태그 사이의 관계를 매핑하는 내 데이터베이스에서 세 번째 테이블 (라고 news_tag를) 만들었습니다. 태그가 뉴스에 자동으로 매핑됩니다.내 문제는 입니다. 내 태그 테이블의 'name'필드가 고유합니다. 나는 정상적인 생각이다.
자, 두 개의 뉴스에 '11 월 '같은 태그가 추가되었습니다. . . 나는 유일한 키 제약의 위반을 얻을 것이다!
나는이 경우 Dotrine이 내 태그 테이블에 복제 된 태그를 삽입해서는 안된다고 생각했습니다.
이 경우 doctrine은 'tag'테이블에 태그를 삽입하지 않고 duplicate 태그의 관계 만 (news_tag라는 내 테이블에 관계를 삽입하여) 매핑합니다. (명백하게 고유 한 키 제약)
이 문제를 해결하는 데 도움을 줄 수 있습니까? 여기
편집 내 컨트롤러의 코드가 뉴스를 추가하는 것입니다
public function insertNewsAction(Request $request)
{
try{
$em = $this->getDoctrine()->getManager();
$news = new News();
$formNews = $this->createForm(NewsType::class, $news);
$formNews->handleRequest($request);
$postedDatas = $formNews->getData();
/* handling of tags field */
$tagsTemp = $postedDatas->getTags();
$tags = explode(';', $tagsTemp);
// convert textfield of my form to ArrayCollection
$news->setTags(new ArrayCollection);
foreach($tags as $singleTag)
{
$tag = new Tag();
$tag->setName($singleTag);
$news->addTag($tag);
}
$em->persist($news);
$em->flush();
$this->addFlash('notice', 'News is correctly inserted');
return $this->render('MyBundle:Form:news.html.twig');
} catch (Exception $ex) {
$this->addFlash('error', 'Flush error. Error news1');
$this->render('MyBundle:Form:news.html.twig');
}
}
, 우리에게 코드를 보여주십시오
귀하의 삽입 코드는 유사에 보일 것입니다. 나는 당신이 그들을 재사용해야하는 동안 모든'post'에 대해 새로운'Tag' 엔티티를 생성하고 있다고 생각합니다 ... –
네, 맞습니다. 나는 각 게시물마다 새로운 Tag 엔티티를 생성합니다. 내 코드를 2 분 안에 게시하고 있습니다. – zm455