Doctrine2类表继承和级联删除

时间:2012-06-08 02:12:31

标签: symfony doctrine-orm

我正在与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,那么Doc​​trine会创建外键级联删除约束吗?如果有人使用SchemaTool,那么Doc​​trine会使用它的内置级联功能吗?

1 个答案:

答案 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表中删除行时,最终会在父表中显示孤立行。