TypeORM cascade选项:cascade,onDelete,onUpdate

问题描述 投票:2回答:1

TypeORM中的级联选项是重叠还是它们的目的完全不同?他们在文档中的描述非常稀少,部分缺失,或者我找不到它。

IOW,请执行以下选项

{ cascade: "update" } = { onUpdate: 'CASCADE' }

{ cascade: "remove" } = { onDelete: 'CASCADE' }

有同样的效果?

或者cascade选项仅用于TypeORM,而onUpdateonDelete仅用于DB模式(由迁移创建)?

cascade typeorm
1个回答
5
投票

这是我调查的结论:

cascade选项不会影响数据库列约束,我相信TypeORM仅在评估如何将实体关系保存到数据库时使用。我们可以定义这样的实体:

@Entity()
class Book extends BaseEntity {
    @ManyToOne(() => Author, (author) => author.books, {
        onDelete: 'CASCADE',
    })
    public author?: Author
}

@Entity()
class Author extends BaseEntity {
    @OneToMany(() => Book, (book) => book.author, {
        cascade: true,
    })
    public books: Book[];
}

onDeleteauthorId上将Book外键设置为CASCADE onDelete。这意味着当删除作者时,该书也会被删除。

cascade: true上设置Author告诉TypeORM如果在作者上附加了新书并保存了作者,新书也应该保存到数据库中。像这样:

const author = await Author.findOne({ id: '123' });
author.books.push(new Book(...));
await author.save();

如果未在Book上设置级联,则新书将不会保存到数据库中。

© www.soinside.com 2019 - 2024. All rights reserved.