Symfony Doctrine2类表继承和级联删除

Symfony Doctrine2类表继承和级联删除,symfony,doctrine-orm,Symfony,Doctrine Orm,我正在使用Doctrine2.2.2和Symfony 2.0.15。我注意到在使用类表继承时,例如: /** * @Entity * @InheritanceType("JOINED") * @DiscriminatorColumn(name="discr", type="string") * @DiscriminatorMap({"person" = "Person", "employee" = "Employee"}) */ 这将在子实体/表(在本例中为Employee)上创建一

我正在使用Doctrine2.2.2和Symfony 2.0.15。我注意到在使用类表继承时,例如:

/**
 * @Entity
 * @InheritanceType("JOINED")
 * @DiscriminatorColumn(name="discr", type="string")
 * @DiscriminatorMap({"person" = "Person", "employee" = "Employee"})
 */
这将在子实体/表(在本例中为Employee)上创建一个外键级联删除约束。条令包含一个重要的黄色方框,内容如下:

当您不使用SchemaTool生成所需的SQL时 应该知道删除类表继承会使用 所有数据库中删除级联的外键属性 实现。如果您自己未能实现这一点,将导致 数据库中的死行


这对我来说毫无意义。这是否意味着,如果不使用SchemaTool,则条令将创建外键级联删除约束?如果确实使用了SchemaTool,Dority会使用它的内置级联功能吗?

意思是,当您使用SchemaTool生成SQL时,它还会将适当的ON-DELETE级联部分添加到外键约束中

ALTER TABLE Employee ADD CONSTRAINT FK_55D6C234BF396750 
    FOREIGN KEY (id) REFERENCES Parent(id) ON DELETE CASCADE;

如果不使用SchemaTool,则需要确保外键约束具有ON DELETE CASCADE部分,或者当从Employee表中删除行时,将在父表中得到孤立行。

好的,明白了。希望有人能清理一下语法。出于好奇,有没有办法使用条令自身的级联功能而不是删除级联?我不这么认为,这可能是一件好事。让数据库强制执行级联删除是正确的选择。例如,如果手动从两个表中的任何一个表中删除一条记录,则最终将得到一条包含一半数据的孤立记录。不完全是你想要的数据库。当您希望删除整个实体及其子实体时,Doctrine的级联功能更有用(这里的区别是,使用联接表继承结构,您可以跨2个表使用一个实体,而不是每个表使用1个实体)。