TypeORM cascade option: cascade, onDelete, onUpdate

后端 未结 2 1392
我在风中等你
我在风中等你 2021-02-07 12:47

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 fi

相关标签:
2条回答
  • 2021-02-07 13:25

    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.

    0 讨论(0)
  • 2021-02-07 13:37

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

    0 讨论(0)
提交回复
热议问题