首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >级联选项: TypeORM、onDelete、onUpdate

级联选项: TypeORM、onDelete、onUpdate
EN

Stack Overflow用户
提问于 2019-03-11 16:42:53
回答 2查看 28.9K关注 0票数 25

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

IOW,执行以下选项

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

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

有同样的效果吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-11 19:52:30

这是我对此进行研究的结论:

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

代码语言:javascript
复制
@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,如果将一本新书附加到某个作者,并且保存了该作者,则该新书也应该保存到数据库中。如下所示:

代码语言:javascript
复制
const author = await Author.findOne({ id: '123' });
author.books.push(new Book(...));
await author.save();

如果未在Book上设置cascade,则不会将新帐簿保存到数据库。

票数 58
EN

Stack Overflow用户

发布于 2020-06-22 11:32:12

在OneToMany关系中还不支持onDelete: 'CASCADE。更多上下文在这里:https://github.com/typeorm/typeorm/issues/1913

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55098023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档