繁体   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