TypeORM级联选项:级联,onDelete,onUpdate

Ser*_*gey 3 cascade typeorm

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

IOW,请执行以下选择

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

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

有同样的效果吗?

cascade选择只为TypeORM使用,而onUpdateonDelete只为DB模式(由移民创建的)?

nom*_*oda 8

这是我研究它的结论:

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[];
}
Run Code Online (Sandbox Code Playgroud)

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

设置为cascade: trueon Author告诉TypeORM,如果在作者身上添加了新书并且保存了作者,则还应将新书保存到数据库中。像这样:

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

如果未设置层叠Book,则新书将不会保存到数据库。

  • 仅供参考:到目前为止,级联已扩展。它不再只是插入和更新。当前选项:`[“插入”、“更新”、“删除”、“软删除”、“恢复”]` (3认同)
  • 我猜在`@OneToMany`端设置`onDelete: 'CASCADE'`没有效果? (2认同)