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[];
}
Run Code Online (Sandbox Code Playgroud)
onDelete将authorId外键设置为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,则新书将不会保存到数据库。
| 归档时间: |
|
| 查看次数: |
1341 次 |
| 最近记录: |