【发布时间】:2019-10-06 09:36:14
【问题描述】:
假设我有三个模型:
- 任务:需要完成的事情,例如“取出回收”。可以多次进行。
- TaskList:一个表示任务列表的对象,并拥有自己的元数据。
- TaskListEntry: 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 看来是这样。
关于如何纠正这个问题的任何想法?
【问题讨论】:
-
请在代码问题中给出minimal reproducible example--剪切&粘贴&可运行代码;具有期望和实际输出的示例输入(包括逐字错误消息);明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不正常。 (调试基础。)
标签: sql sqlite foreign-keys sequelize.js cascade