我的应用程序中有一个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