我正在使用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
但是当我删除一个类别时,部门实体不会被删除,尽管约束应该级联。我错过了什么?
我是否必须配置任何功能才能使其正常工作?
答案 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']