如何使用Doctrine 1.2级联删除?

时间:2011-09-23 19:29:55

标签: doctrine symfony1 cascade doctrine-1.2 cascading-deletes

我一直在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的痕迹......)。当然,级联不起作用,我必须通过改变默认的后端操作来手动实现它。

有谁知道我在做错了什么?

1 个答案:

答案 0 :(得分:1)

我认为学说会关闭你的RDBMS(它是MySQL吗?)不支持级联这一事实。如果您将MySQL与MyISAM存储引擎一起使用,那么就是这种情况(顺便说一下,它也不支持REFERENCES。)。如果我是你,我会尝试直接与你的RDBMS客​​户端创建一个级联,只是为了检查它是否可能。