TypeORM cascade option: cascade, onDelete, onUpdate

删除回忆录丶 提交于 2021-02-06 10:12:40

问题


Do cascade options in TypeORM overlap or do they have a completely different purpose? Their description in the documentation is very scarce and partly missing, or I couldn't find it.

IOW, do the following options

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

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

have the same effect?

Or the cascade option is only for the TypeORM use while onUpdate and onDelete are only for the DB schema (created by migration)?


回答1:


This is my conclusion of looking into it:

The cascade option does not affect the database column constraints, and I believe is used by TypeORM only in evaluating how to save entity relations to the database. We can define entities like this:

@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 sets the authorId foreign key to CASCADE onDelete on Book. This means that when the author is deleted, the book is also deleted.

Setting cascade: true on Author tells TypeORM that if a new book is appended on an author and the author is saved, the new book should also be saved to the database. Like this:

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

If cascade is not set on Book, the new book will not be saved to the database.




回答2:


onDelete: 'CASCADE isn't supported in OneToMany relations yet. More context here: https://github.com/typeorm/typeorm/issues/1913



来源:https://stackoverflow.com/questions/55098023/typeorm-cascade-option-cascade-ondelete-onupdate

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!