Вариант каскада TypeORM: каскад, onDelete, onUpdate - PullRequest
2 голосов
/ 11 марта 2019

Перекрываются ли каскадные параметры в TypeORM или они имеют совершенно другое назначение?Их описание в документации очень скудное и частично отсутствует, или я не смог его найти.

IOW, выполните следующие действия

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

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

имеют тот же эффект?

Или опция cascade предназначена только для использования TypeORM, тогда как onUpdate и onDelete только для БДсхема (созданная миграцией)?

1 Ответ

3 голосов
/ 11 марта 2019

Это мой вывод из рассмотрения:

Опция 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 значение CASCADE onDelete для Book.Это означает, что при удалении автора книга также удаляется.

Установка cascade: true на Author сообщает TypeORM, что если к автору добавляется новая книга и автор сохраняется, новая книгатакже должны быть сохранены в базе данных.Например:

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

Если каскад не установлен на Book, новая книга не будет сохранена в базе данных.

...