4

我正在尝试创建一个与其他实体有三个关联的学说实体

所以一个项目与:

  • 必须与一个 Rssfeed 相关联,它源自
  • 可以与一个或多个位置关联
  • 可以与一个或多个标签相关联

这是我的尝试:

class Item{

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

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

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

现在

  • 如果一个 Rssfeed 被删除,关联的项目也必须被删除
  • 如果删除了某个项目,则应分离附加到该项目的 Rssfeeds 和 Locations 和 Tags
  • 如果一个位置或标签被删除,相关的项目应该被分离,因为它们是可选的关联。

我应该如何更改我的代码来实现这一点?

4

2 回答 2

1

您必须为 $rssfeed 添加 @JoinColumn 和 onDelete="CASCADE" 并为 Location 和 Tag 实体中的外键添加 onDelete="SET NULL" 。

    /**
     * @ManyToOne(targetEntity="Rssfeed")
     * @JoinColumn(name="rssfeed_id", referencedColumnName="id", onDelete="CASCADE")
     */
    protected $rssfeed;
于 2012-06-25T06:07:10.520 回答
1

对于您的 Item 实体中的每个关联,将 onDelete="SET NULL" 添加到 @JoinColumn 注释。在您的位置和标签实体中,找到 JoinColumn 注释并添加 onDelete="SET NULL" 以与“Item”关联。在 RssFeed 实体下,找到每个 @JoinColumn 注释并添加 onDelete="SET NULL"。请注意,您也可以使用 Doctrine 级联操作来实现此目的(即 cascade={"remove"} 等;但是,由于操作不是在 RDBMS 级别执行的,因此它可能会明显变慢。

于 2012-06-25T23:26:18.267 回答