如何建立父子关联,删除子代会删除父子,反之亦然

时间:2018-08-13 13:36:13

标签: sql sqlite sequelize.js

我目前正试图使两个表创建两个具有1:M关联的表。我要实现的目标是:

Parent deleted? -> Set foreign key in Child to null Child deleted? -> Delete parent

我已经尝试了很长时间,但不确定是否确实可行。这些是我的创建表查询(由sequelize(一个SQL node.js模块)生成)

父表: CREATE TABLE IF NOT EXISTS `Sets` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `appId` INTEGER NOT NULL, `cardAmount` INTEGER NOT NULL, `foil` TINYINT(1) NOT NULL, `reserved` TINYINT(1) NOT NULL);

子表: CREATE TABLE IF NOT EXISTS `Cards` (`assetId` INTEGER PRIMARY KEY, `appId` INTEGER NOT NULL, `foil` TINYINT(1) NOT NULL, `reserved` TINYINT(1) NOT NULL, `name` VARCHAR(255) NOT NULL, `setId` INTEGER REFERENCES `Sets` (`id`) ON DELETE SET NULL ON UPDATE CASCADE);

我不太确定要对它们进行什么更改以使其像我想要的那样工作,因为父表没有外键,所以我认为不可以添加ON DELETE。感谢帮助!

编辑:我使用的方言是SQLite

1 个答案:

答案 0 :(得分:0)

我们可以在关联过程中添加ON DELETE选项。

Parent.hasOne(models.Child, {
    onDelete: 'set null'
});

这将在子模型中将foreignKey设置为null。但是要在删除子级后删除父级,请尝试使用子级模型中的钩子beforeDestroyafterDestroy删除父级。