Как каскадировать удаления с Doctrine 1.2? - PullRequest
2 голосов
/ 23 сентября 2011

Я боролся с определением каскадного поведения в Doctrine ORM.

Согласно документации , предполагается использовать onDelete: CASCADE для каскада на уровне базы данных (чего я и пытаюсь достичь здесь).

Полный пример можно увидеть в учебнике Symfony .

Однако все такие каскадные характеристики в моей схеме игнорируются.

Вот соответствующая выдержка:

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

Конечно, таблицы задач и ассоциаций определены правильно. Я не буду публиковать их здесь, во-первых, чтобы избежать слишком длинного вопроса, но, пожалуйста, спросите, если это кажется необходимым.

Вот сгенерированный 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 Ответ

1 голос
/ 24 сентября 2011

Я думаю, что доктрина замолкнет о том факте, что ваша СУБД (это MySQL?) Не поддерживает каскады, если это не так.Это тот случай, если вы используете MySQL с механизмом хранения MyISAM (кстати, тоже не поддерживающим REFERENCES ...).На вашем месте я бы попытался создать каскад непосредственно с вашим клиентом RDBMS, просто чтобы проверить, возможно это или нет.

...