TypeORM级联选项:cascade、onDelete、onUpdate

TypeORM cascade option: cascade, onDelete, onUpdate

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

IOW,执行以下选项

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

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

有同样的效果吗?

或者 cascade 选项仅供 TypeORM 使用,而 onUpdateonDelete 仅供数据库模式(由迁移创建)?

这是我调查后的结论:

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。这意味着当作者被删除时,这本书也被删除了。

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

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

如果Book没有设置级联,新书将不会保存到数据库

OneToMany 关系尚不支持

onDelete: 'CASCADE。更多上下文在这里:https://github.com/typeorm/typeorm/issues/1913