2012-03-12 28 views
0

私のアプリケーションにはPostとTagのエンティティがあり、それらの間には多くの関連が必要です。私はそれを正しく管理したとは思うが、確かにそうは思わない。ここに私のエンティティは以下のとおりです。Symfony2 ManyToMany埋め込みフォーム

ポスト:

/** 
* @ORM\Table(name="posts") 
*/ 
class Post 
{ 
    (...) 

    /** 
    * @ORM\OneToMany(targetEntity="PostTag", mappedBy="post_id") 
    */ 
    private $tags; 

    public function __construct() 
    { 
    $this->tags = new ArrayCollection(); 
    } 

    (...) 
} 

タグ:もちろん、すべての3の

/** 
* @ORM\Table(name="post_tags") 
* @ORM\Entity 
*/ 
class PostTag 
{ 
    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="Post", inversedBy="tags") 
    * @ORM\JoinColumn(name="post_id", referencedColumnName="id") 
    */ 
    private $post_id; 

    /** 
    * @ORM\ManyToOne(targetEntity="Tag", inversedBy="posts") 
    * @ORM\JoinColumn(name="tag_id", referencedColumnName="id") 
    */ 
    private $tag_id; 

    (...) 
} 

と:私はまた、これらの関係を格納するためのPostTagエンティティを作成し

class Tag 
{ 
    /** 
    * @ORM\Column(name="tagname", unique=true, type="string", length=255) 
    */ 
    private $tagname; 

    /** 
    * @ORM\OneToMany(targetEntity="PostTag", mappedBy="tag_id") 
    */ 
    private $posts; 

    public function __construct() 
    { 
     $this->posts = new ArrayCollection(); 
    } 

    (...) 
} 

適切なゲッター/セッター。関係はこのように大丈夫ですか?

私はそれが正しいと信じていますが、今私はPostエンティティに埋め込みフォームを作るのに苦労しています。私が必要とするのは、PostTypeのタグフィールドを作成することです。そこでは、タグテーブルに保存されたタグと、新しく作成されたタグとpost_tagsテーブルの投稿のIDの両方を入力できます。既に保存されているタグを別のフィールドで選択できるようにしたいので、エンティティをこのように構築する必要があります。

私はこれを書こうとしましたが、実際には悪いコードと混同してしまったので、私が持っていたものをコピーしようとしません。誰かが簡単に私に啓発することができますこれを達成する必要がありますか?

おかげ

答えて

3

あなたがPostTagとの間の仲介エンティティを必要としません。私は数ヶ月後にそれを働かせるために苦労しましたが、慎重にMany-To-Many, Unidirectionalを読んだ後、私はそれをやりました。

Many-To-OneOne-To-Manyのリレーションを作成するのではなく、1つのMany-To-Manyというリレーションシップを作成するという点が重要です。

埋め込みフォームについては、PostTagの間にMany-To-Manyの関係を設定すると、collectionフィールドフォームタイプを使用する必要があります。基本的に、あなたが言っているでしょう:「OK、私はTags多くを持つことができますPostのフィールドを持つフォームを持っている

もちろん、私はあなたが(削除、更新を永続化)手動でデータを管理しようと示唆していますモデルでエラーが発生した場合は、フォーム自体が厄介なので、問題の原因を突き止めるのがはるかに難しいでしょう。

公式のsymfonyドキュメントは素晴らしいarticleを持っていますこれについては、読んでいるうちにSymfonyの初心者にとっては圧倒していますが、

+1

私はありがとうございますnput。私の問題は、本当に多対多の関係を作りたくないということです。私はそれを行う場合、私はそのテーブルにフィールドや書式を追加することはできません、そして、私は本当にそれが好きではありません。リンクしているDoctrineドキュメントでさえ、3つのエンティティ間に1対多、多対1の関係を持つ中間エンティティを作成する方が良い方法だと言います。フォームコレクションのヒントありがとう! – stamas

+0

私はこの解決策を最後に行った。 – stamas

関連する問題