[英]Symfony2 ManyToMany embedded forms
我的应用程序中有一个Post and Tag实体,并且它们之间需要多对多的关联。 我认为我管理得当,但不确定。 这是我的实体:
帖子:
/**
* @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个都带有适当的吸气剂/吸气剂。 这样关系好吗?
我相信我是对的,但现在我正努力为Post实体制作嵌入式表格。 我需要的是在PostType中创建一个标签字段,在其中可以键入保存在标签表中的标签以及新创建的标签的ID,并在post_tags表中进行张贴。 我还希望已经保存的标签在另一个字段中可供选择,这就是为什么我要用这种方式构建实体的原因。
我尝试编写此代码,但确实与错误代码混淆,因此我什至不尝试复制自己的代码。 有人可以简短地启发我,我应该如何做到这一点?
谢谢
您不需要Post
和Tag
之间的中介实体。 我本人努力使它恢复正常工作几个月,但是在仔细阅读《 多对多单向》之后 ,我设法做到了。
问题的关键是,你不创建Many-To-One
和One-To-Many
关系,但单一的Many-To-Many
。
关于嵌入式表单,一旦在Post
和Tag
之间建立了Many-To-Many
关系,就需要使用collection
字段表单类型。 基本上,您会说:“好吧,我有一个表单,其中包含Post
字段,其中可以包含许多 Tags
。
当然,我建议您先尝试手动管理数据(持久性,更新,删除),然后再使其与表单一起使用。 如果您的模型有错误,则定位问题的源将更加困难,因为表单本身可能很棘手。
Symfony官方文档对此有很棒的文章 ,但是,我必须说,对于Symfony初学者来说,这有点不知所措,就像我在阅读它时一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.