【问题标题】:TypeORM cascade option: cascade, onDelete, onUpdateTypeORM 级联选项:cascade、onDelete、onUpdate
【发布时间】:2020-09-28 15:11:08
【问题描述】:

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

IOW,请执行以下选项

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

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

效果一样吗?

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

【问题讨论】:

  • 老兄,你从哪里读到级联的?我在他们的文档中找不到它。

标签: cascade typeorm


【解决方案1】:

这是我调查的结论:

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[];
}

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

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

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

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

【讨论】:

  • 我猜在@OneToMany-side中设置onDelete: 'CASCADE'没有效果?
  • 仅供参考:到目前为止,级联得到了扩展。它不再只是插入和更新。当前选项:["insert", "update", "remove", "soft-remove", "recover"]
  • 清晰简洁的解释!谢谢@nomadoda
  • 这是解决问题的最佳答案。谢谢!
【解决方案2】:

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

【讨论】:

  • 我不明白如何根据@jstnno 链接到的问题得出不支持级联删除的结论?该问题提到了 2019 年修复的错误!
猜你喜欢
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多