外键约束不适用于Doctrine / Symfony和SQLite

时间:2014-04-07 22:41:37

标签: php sqlite symfony doctrine-orm

我正在使用Doctrine 2.4.2,Symfony 2.4和SQLite 3.8.3。

我定义了两个实体:

Category:
    type: entity
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    oneToMany:
        ministries:
            targetEntity: Ministry
            cascade: [persist]
            mappedBy: category

Ministry:
    type: entity
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    manyToOne:
        category:
            targetEntity: Category
            inversedBy: ministries
            joinColumn:
                name: category_id
                nullable: false
                onDelete: CASCADE

但是当我删除一个类别时,部门实体不会被删除,尽管约束应该级联。我错过了什么?

我是否必须配置任何功能才能使其正常工作?

3 个答案:

答案 0 :(得分:6)

您可能需要确保在删除前设置PRAGMA foreign_keys = ON

请注意,这是连接设置,而不是数据库设置。

<强>增加:
使用Symfony's event subscriber,可以在执行任何写入查询之前在Doctrine的preFlush事件中执行此命令。

答案 1 :(得分:1)

对于其他通过Google来到这里的人,以了解为什么在理论中不强制使用外键。

从版本2.4.0-BETA1开始,已根据this comment恢复/删除了dbal SqlitePlatform中的外键支持。

这使我在代码库中搜索了很多错误,只是为了发现该学说本身由于不稳定而删除了该功能。

答案 2 :(得分:0)

更改为cascade: ['persist', 'remove']