簡體   English   中英

Symfony2 ManyToMany嵌入式表格

[英]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表中進行張貼。 我還希望已經保存的標簽在另一個字段中可供選擇,這就是為什么我要用這種方式構建實體的原因。

我嘗試編寫此代碼,但確實與錯誤代碼混淆,因此我什至不嘗試復制自己的代碼。 有人可以簡短地啟發我,我應該如何做到這一點?

謝謝

您不需要PostTag之間的中介實體。 我本人努力使它恢復正常工作幾個月,但是在仔細閱讀《 多對多單向》之后 ,我設法做到了。

問題的關鍵是,你不創建Many-To-OneOne-To-Many關系,但單一的Many-To-Many

關於嵌入式表單,一旦在PostTag之間建立了Many-To-Many關系,就需要使用collection字段表單類型。 基本上,您會說:“好吧,我有一個表單,其中包含Post字段,其中可以包含許多 Tags

當然,我建議您先嘗試手動管理數據(持久性,更新,刪除),然后再使其與表單一起使用。 如果您的模型有錯誤,則定位問題的源將更加困難,因為表單本身可能很棘手。

Symfony官方文檔對此有很棒的文章 ,但是,我必須說,對於Symfony初學者來說,這有點不知所措,就像我在閱讀它時一樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM