Предположим, у меня есть три модели:
- Задание: Что-то, что нужно сделать, например "убрать переработку".Может выполняться много раз.
- TaskList: Объект, представляющий список задач и имеющий собственные метаданные.
- TaskListEntry: Anассоциация между Task и TaskList, которая может иметь такие данные, как приоритет, или кто ей назначен.
У меня есть мои ассоциации, настроенные так:
Task.hasMany(TaskListEntry, {onDelete: 'cascade', hooks: true}));
TaskList.hasMany(TaskListEntry, {onDelete: 'cascade', hooks: true});
TaskListEntry.belongsTo(TaskList);
TaskListEntry.belongsTo(Task);
Это работаетхорошо, кроме удаления.Когда я удаляю задачу, все связанные TaskListEntries удаляются, как и ожидалось.Однако, когда я удаляю TaskList, связанные с ним TaskListEntries просто имеют свой внешний ключ для TaskList равным null
.
Кажется, что Sequelize генерирует следующую таблицу:
CREATE TABLE `TaskListEntries`(
`id` UUID PRIMARY KEY,
/* some other fields here */
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NOT NULL,
`TaskId` UUID REFERENCES `Tasks`(`id`) ON DELETE CASCADE ON UPDATE CASCADE,
`TaskListId` UUID REFERENCES `TaskLists`(`id`) ON DELETE SET NULL ON UPDATE CASCADE);
Несмотря на то, что ассоциации настроены одинаково, внешние ключи для задач и списков задач имеют различное поведение DELETE
.Если я удаляю одну из ассоциаций, другая работает просто отлично.
Поэтому я думаю, что проблема заключается в нескольких внешних ключах с ON DELETE CASCADE
, по крайней мере, насколько Sequelize видит его.
Есть мысли, как это исправить?