关于删除级联意外行为

时间:2019-07-27 08:32:14

标签: postgresql cascade typeorm

我有两个表:

1-相册

2-首曲目

相册与“曲目”之间具有一对多关系,该曲目在删除时会级联。曲目与专辑具有多对一关系。

// Albums
module.exports = new EntitySchema({
    name: "Albums",
    columns: {
        id: {
            type: "integer",
            primary: true,
            generated: "increment"
        },
        title: {
            type: "character varying",
            length: 70,
            nullable: false
        }
    },
    relations: {
        tracks: {
            target: "Tracks",
            nullable: false,
            type: "one-to-many",
            joinTable: true,
            joinColumn: {name: "tracks", referencedColumnName: "id"},
            inverseSide: "album_id",
            cascade: true,
            onDelete: "CASCADE"
        },
    }
});
// Tracks
module.exports = new EntitySchema({
    name: "Tracks",
    columns: {
        id: {
            type: "integer",
            primary: true,
            generated: "increment"
        },
        title: {
            type: "character varying",
            nullable: false
        },
        rank_in_album: {
            type: "integer",
            nullable: true
        }
    },
    relations: {
        album_id: {
            target: "Albums",
            type: "many-to-one",
            joinTable: true,
            joinColumn: {name: "album_id", referencedColumnName: "id"},
        }
    }
});

问题:

1)最终,我想要的行为是在删除专辑后删除曲目。但是,我不明白为什么此配置可以完成此行为。根据我的理解,如果在关系的专辑侧设置了“删除级联”,则不会删除专辑中的曲目。

2)如何正确设置专辑,以便删除专辑中的所有曲目后,专辑在删除时会级联。此外,如果专辑被删除,其曲目也会被删除。

这是与TypeOrm和Postgres一起使用的。

0 个答案:

没有答案