1

私は数時間答えを探していましたが、自分できれいな解決策を見つけることができません.

「タグ」というエンティティがあります。これらのタグは、ほぼすべてのもの、記事、ニュースなどに追加できます。したがって、私のエンティティ (この例では記事) は、単方向の 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 をこの隠しフィールドに書き込むことができます。

私の全体的な質問は、なぜこの方法は挿入では機能するのに、更新では機能しないのですか? これを修正するにはどうすればよいですか?

あなたの助けやヒントに感謝します!!

4

0 に答える 0