TypeORM中的级联选项是重叠还是它们的目的完全不同?他们在文档中的描述非常稀少,部分缺失,或者我找不到它。
IOW,请执行以下选项
{ cascade: "update" }
= { onUpdate: 'CASCADE' }
{ cascade: "remove" }
= { onDelete: 'CASCADE' }
有同样的效果?
或者cascade
选项仅用于TypeORM,而onUpdate
和onDelete
仅用于DB模式(由迁移创建)?
这是我调查的结论:
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。这意味着当删除作者时,该书也会被删除。
在cascade: true
上设置Author
告诉TypeORM如果在作者上附加了新书并保存了作者,新书也应该保存到数据库中。像这样:
const author = await Author.findOne({ id: '123' });
author.books.push(new Book(...));
await author.save();
如果未在Book
上设置级联,则新书将不会保存到数据库中。