私は数時間答えを探していましたが、自分できれいな解決策を見つけることができません.
「タグ」というエンティティがあります。これらのタグは、ほぼすべてのもの、記事、ニュースなどに追加できます。したがって、私のエンティティ (この例では記事) は、単方向の ManyToMany マッピングを使用してこれらのタグを参照します。
/**
* @ORM\ManyToMany(targetEntity="Tag")
* @ORM\JoinTable(name="tag2article",
* joinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id")}
* )
*/
private $tags;
articleTag、newsTag など、またはいくつかのエンティティを joinTables として使用したくないため、この関係は一方向です。doctrine manual では、追加の joinTableEntity を使用して 3 つのエンティティなどの関係を構築できるため、一方向の ManyToMany 関係を「あまり一般的ではありません」と呼んでいます。しかし、これはこの種のエンティティが多すぎるという結果になります。
記事を作成すると、これらのタグは次の方法で追加されます。
foreach ($tagArray as $tagId) {
$tag = $entityManager->getRepository('myBundle:Tag')->findOneById($tagId);
if ($tag != null) {
$article->addTag($tag);
}
}
$entityManager->persist($article);
$entityManager->flush();
これは挿入時にうまく機能します。更新時に同じことを行いますが、機能せず、理由がわかりません。私が見つけた唯一の解決策は、この記事をタグに追加することでしたが、一方向の関係で作業しているにもかかわらず、これは不可能です。
私の ArticleForm には、隠しフィールドがあります。
->add('tags', 'hidden', array(
'data' => '',
'property_path' => false
))
このようにして、Ajax を使用して非常に簡単にタグを追加し、これらの tagId をこの隠しフィールドに書き込むことができます。
私の全体的な質問は、なぜこの方法は挿入では機能するのに、更新では機能しないのですか? これを修正するにはどうすればよいですか?
あなたの助けやヒントに感謝します!!