TypeORM中的级联选项是重叠的,还是它们具有完全不同的目的?他们在文档中的描述非常稀少,或者部分缺失,或者我找不到。
IOW,执行以下选项
{ cascade: "update" } = { onUpdate: 'CASCADE' }
{ cascade: "remove" } = { onDelete: 'CASCADE' }
有同样的效果吗?
或者cascade选项仅用于TypeORM,而onUpdate和onDelete仅用于DB模式(通过迁移创建)?
发布于 2019-03-11 19:52:30
这是我对此进行研究的结论:
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[];
}onDelete将authorId外键设置为Book上的CASCADE onDelete。这意味着当作者被删除时,书也会被删除。
在Author上设置cascade: true告诉TypeORM,如果将一本新书附加到某个作者,并且保存了该作者,则该新书也应该保存到数据库中。如下所示:
const author = await Author.findOne({ id: '123' });
author.books.push(new Book(...));
await author.save();如果未在Book上设置cascade,则不会将新帐簿保存到数据库。
发布于 2020-06-22 11:32:12
在OneToMany关系中还不支持onDelete: 'CASCADE。更多上下文在这里:https://github.com/typeorm/typeorm/issues/1913
https://stackoverflow.com/questions/55098023
复制相似问题