【发布时间】:2011-11-23 22:26:10
【问题描述】:
我一直在与 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……)。当然,级联不起作用,我必须通过更改默认后端操作来手动实现它。
有谁知道我在这里做错了什么?
【问题讨论】:
-
Doctrine在生成的sql(data/sql/schema.sql)末尾生成外键关系,检查是否存在。
-
不,我实际上已经
grepped 遍历了所有生成的 SQL,但没有任何CASCADE的踪迹……不过感谢您的精确!
标签: doctrine symfony1 cascade doctrine-1.2 cascading-deletes