教义 2 OneToMany 级联设置 NULL
Posted
技术标签:
【中文标题】教义 2 OneToMany 级联设置 NULL【英文标题】:Doctrine 2 OneToMany Cascade SET NULL 【发布时间】:2012-02-10 03:11:37 【问题描述】:错误
无法删除或更新父行:外键约束失败。
类
class Teacher
/**
*@ORM\OneToMany(targetEntity="publication", mappedBy="teacher")
*/
protected $publications;
class Publication
/**
* @ORM\ManyToOne(targetEntity="Teacher", inversedBy="publications")
* @ORM\JoinColumn(name="teacher_id", referencedColumnName="id")
*/
protected $teacher;
我想要
我想要的是,当您删除教师时,将 id_teacher 修改为 NULL。我想保留出版物,但不提及教授。
我不知道在 Doctrine 中如何做到这一点,这可能吗?还是必须始终与老师建立关系?
【问题讨论】:
【参考方案1】:您应该在您的实体发布的注释中添加选项onDelete="SET NULL"
,如下所示:
class Publication
/**
* @ORM\ManyToOne(targetEntity="Teacher", inversedBy="publications")
* @ORM\JoinColumn(name="teacher_id", referencedColumnName="id", onDelete="SET NULL")
*/
protected $teacher;
干杯!
【讨论】:
请注意,添加后您必须更新数据库架构。 * @ORM\JoinColumn(onDelete="SET NULL") 就足够了 这个解决方案直接作用于数据库而不是原则,这很好,但如果你使用像soft-deleteable 这样的机制,请小心。如果您的实体被软删除,它不会触发 SET_NULL 并且您的子实体将指向“已删除”对象。您需要添加一个教义监听器以使其工作(取决于您想要的行为)。以上是关于教义 2 OneToMany 级联设置 NULL的主要内容,如果未能解决你的问题,请参考以下文章
ConfORM Nhibernate OneToMany 级联