簡體   English   中英

與教義2的關聯

[英]Associations with Doctrine 2

我正在嘗試創建一個具有學說的實體,該實體與其他實體具有三個關聯

因此,某項與以下內容相關聯:

  • 必須與它來自的一個Rssfeed關聯
  • 可以與一個或多個位置相關聯
  • 可以與一個或多個標簽關聯

這是我的嘗試:

class Item{

    /**
     * @ManyToOne(targetEntity="Rssfeed")
     */
    protected $rssfeed;

    /**
     *
     * @ManyToMany(targetEntity="Location")
     */
    protected $locations;

    /**
     *
     * @ManyToMany(targetEntity="Tag")
     */
    protected $tags;
}

現在

  • 如果刪除了Rssfeed,則也必須刪除關聯的項目
  • 如果刪除了某個項目,則應分離該項目的Rssfeed和“位置”以及“標簽”
  • 如果刪除了位置或標記,則應僅分離關聯的項,因為它們是可選的關聯。

我應該如何更改我的代碼來實現這一目標?

您必須為$ rssfeed添加@JoinColumn並為其onDelete =“ CASCADE”以及為Location和Tag實體中的外鍵添加onDelete =“ SET NULL”。

    /**
     * @ManyToOne(targetEntity="Rssfeed")
     * @JoinColumn(name="rssfeed_id", referencedColumnName="id", onDelete="CASCADE")
     */
    protected $rssfeed;

對於Item實體中的每個關聯,將onDelete =“ SET NULL”添加到@JoinColumn批注。 在您的位置和標記實體中,找到JoinColumn批注,並為與“ Item”的關聯添加onDelete =“ SET NULL”。 在RssFeed實體下,找到每個@JoinColumn注解並添加onDelete =“ SET NULL”。 請注意,您也可以使用Doctrine級聯操作來實現此目的(例如,級聯= {“刪除”}等;但是,由於操作不是在RDBMS級別執行的,因此它的運行速度可能會大大降低。

暫無
暫無

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

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