我有两个具有一对一单向关系的实体:
class Foo {
...
/**
* @OneToOne(targetEntity="Bar")
*/
private $bar;
...
}
class Bar {
...
}
当我尝试删除Bar实体时,我收到此错误:
完整性约束违规:1451无法删除或更新父行:外键约束失败
如何在不失去删除Bar实体的能力的情况下保持单向关系?
答案 0 :(得分:8)
使用Doctrine 2,您需要这样做:
class Foo {
...
/**
* @OneToOne(targetEntity="Bar")
* @JoinColumn(name="bar_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $bar;
...
}
class Bar {
...
}
onDelete =“Cascade”将执行CappY在答案中所说的内容(在删除级联上设置外键)。这样,当您删除Bar实体时,相关的Foo实体也将被删除。
如果你不想删除你的Foo实体,你只需用onDelete =“SET NULL”替换onDelete =“Cascade”。
答案 1 :(得分:4)
您可以使用Orphan Removal。它适用于one-to-one
,one-to-many
和many-to-many
关联。
您只需添加orphanRemoval=true
选项,如下所示:
@OneToOne(targetEntity="Bar", orphanRemoval=true)
希望这可以帮助某人。
答案 2 :(得分:1)
设置外键ON DELETE级联(这也会删除Foo记录)或SET NULL(当你删除Bar时,这会将列设置为NULL)
http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html