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: true
on 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 次 |
最近记录: |