私は簡単なブログ投稿システムを作成しています。私はちょうど2つのエンティティNewsとTagを持っています。Doctrine:dbに存在しない場合は、関連オブジェクト(タグ)を挿入してください
ニュースとタグの間に「manyToMany」関係を作成しました。
Doctrineはこのような私のニュースや自分のタグとの間の関係をマッピングするために、私のデータベースに(news_tagと呼ばれる)第三のテーブルを作成しました:
+------+----------+------+
| ID | news_id |tag_id|
+------+----------+------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 3 |
| 4 | 2 | 2 |
+------+----------+------+
私はデシベルでニュースを追加するときに関係が正常に動作します。タグはニュースに自動的に割り当てられます
私の問題は です。私のタグテーブルのフィールド名は一意です。私は普通だと思います。
ここで、2つのニュースに同じタグ「11月」を追加しています。 。 。私はユニークなキー制約違反を取得します!
このケースでは、Dotrineは私のタグテーブルに重複したタグを挿入しようとするべきではないと考えました。
私はこの場合、doctrineは 'tag'というテーブルにタグを挿入することなく、重複したタグの関係(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