我一直在Doctrine ORM中与defining cascade behavior斗争。
根据the documentation,应该使用onDelete: CASCADE
进行数据库级别级联(这是我在这里尝试实现的)。
可以在Symfony tutorial上看到完整的示例。
但是,我的架构中忽略了所有这些级联规范。
以下是相关摘录:
Advancement:
columns:
association_id:
type: integer(4)
notnull: true
task_id:
type: integer(4)
notnull: true
state:
type: enum
values: ['todo', 'current', 'done', 'cancelled']
notnull: true
relations:
Association:
class: Association
local: association_id
foreignType: one
onDelete: CASCADE
Task:
class: Task
local: task_id
foreignType: one
onDelete: CASCADE
当然,正确定义了Task和Association表。我不会在这里首先发布它们以避免一个太长的问题,但请问这是否有必要。
这是生成的SQL(我的换行符):
CREATE TABLE advancement
(id INTEGER PRIMARY KEY AUTOINCREMENT,
association_id INTEGER NOT NULL,
task_id INTEGER NOT NULL,
state VARCHAR(255) NOT NULL);
顺便说一下,CASCADE
(也不是REFERENCES
的痕迹......)。当然,级联不起作用,我必须通过改变默认的后端操作来手动实现它。
有谁知道我在做错了什么?
答案 0 :(得分:1)
我认为学说会关闭你的RDBMS(它是MySQL吗?)不支持级联这一事实。如果您将MySQL与MyISAM存储引擎一起使用,那么就是这种情况(顺便说一下,它也不支持REFERENCES
。)。如果我是你,我会尝试直接与你的RDBMS客户端创建一个级联,只是为了检查它是否可能。