我的應用程序中有一個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();
}
(...)
}
標籤:
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();
}
(...)
}
我還創建了一個PostTag實體來存儲這些關係:
/**
* @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;
(...)
}
當然,所有3與適當的獲得者/設定者。這種關係好嗎?
我相信我是不是正確的,但我現在努力使對郵政實體嵌入的形式。我需要的是,在PostType中創建一個標籤字段,其中可以輸入保存在標籤表中的標籤以及新創建的標籤和post_tags表中的帖子的標識。我也希望已保存的標籤可以在另一個字段中選擇,這就是爲什麼我要用這種方式構建實體。
我試着寫這一點,但確實得到了不好的代碼混淆,所以我甚至不試圖複製我有什麼。有人能簡單地啓發我,我應該如何實現這一目標?
感謝
謝謝你我NPUT。我的問題是,我真的不想做出真正的多對多關係。如果我這樣做,我不能將任何字段或格式添加到該表中,而我真的不喜歡那樣。即使您鏈接的學說文檔也表明,最好的做法是創建一箇中間實體,並在這三個實體之間建立一對多,多對一的關係。感謝您的表單收藏提示! – stamas 2012-03-12 21:04:45
我到最後解決了這個問題。 – stamas 2012-03-21 20:37:39