我正在与Sytrfony 2.0.15一起使用Doctrine2.2.2。我注意到使用类表继承时,例如:
/**
* @Entity
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
*/
这将在子实体/表(在本例中为Employee)上创建外键级联删除约束。 Doctrine的documentation on this包含一个看起来很重要的黄色框,上面写着:
当您不使用SchemaTool生成所需的SQL时 应该知道删除一个类表继承使用了 所有数据库中的外键属性ON DELETE CASCADE 实现。没有自己实现这一点将导致 数据库中的死行。
这对我没有意义。这是否意味着如果您不使用SchemaTool,那么Doctrine会创建外键级联删除约束吗?如果有人使用SchemaTool,那么Doctrine会使用它的内置级联功能吗?
答案 0 :(得分:1)
这是说当您使用SchemaTool生成SQL时,它还会将适当的ON DELETE CASCADE部分添加到您的外键约束中。
ALTER TABLE Employee ADD CONSTRAINT FK_55D6C234BF396750
FOREIGN KEY (id) REFERENCES Parent(id) ON DELETE CASCADE;
如果不使用SchemaTool,则需要确保外键约束具有ON DELETE CASCADE部分,或者从Employee表中删除行时,最终会在父表中显示孤立行。