[英]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.