TypeORM:在一次保存调用中保存M:N与自定义连接表的关系



图书实体

@ObjectType()
@Entity({ name: 'books' })
export default class Book extends BaseEntity {
@Field()
@PrimaryGeneratedColumn()
id: number;
@Field()
@Column()
title: string;
@Field(() => Author)
@ManyToOne(() => Author, (author) => author.books, {
onDelete: 'CASCADE',
})
@JoinColumn({ name: 'author_id' })
author: Author;
@ManyToMany(() => Category, {
cascade: true,
nullable: true,
})
@JoinTable({
name: 'book_categories',
joinColumn: {
name: 'bookId',
referencedColumnName: 'id',
},
inverseJoinColumn: {
name: 'categoryId',
referencedColumnName: 'id',
},
})
categories: Category[];
@Field(() => [BookCategory])
@OneToMany(() => BookCategory, (bookCategory) => bookCategory.bookId, {
cascade: true,
})
bookCategories: BookCategory[];
}

BookCategory实体
@ObjectType()
@Entity({ name: 'book_categories' })
export class BookCategory {
@Field()
@Column({ nullable: true })
isActive: boolean;
@Column()
@IsNotEmpty()
@PrimaryColumn()
bookId: number;
@Column()
@IsNotEmpty()
@PrimaryColumn()
categoryId: number;
@Field(() => Book)
@ManyToOne(() => Book, (book) => book.bookCategories, { cascade: true })
book: Book;
@Field(() => Category)
@ManyToOne(() => Category, (category) => category.bookCategories, {
cascade: true,
})
category: Category;
}

类别实体

mport { BookCategory } from '../bookCategory/book-category-entity';
@ObjectType()
@Entity({ name: 'categories' })
export default class Category extends BaseEntity {
@Field()
@PrimaryGeneratedColumn()
id: number;
@Field()
@Column()
title: string;
@ManyToMany(() => Book, (book) => book.categories)
books: Book[];
@Field(() => [BookCategory])
@OneToMany(() => BookCategory, (bookCategory) => bookCategory.category, {
cascade: true,
})
bookCategories: BookCategory[];
}

我已经使用sequelize很长时间了,现在我正在探索排版。我想做的是用一个有效载荷保存这三个实体就像sequelize一样。例如,在sequelize中,你可以这样做


await User.create({
username: 'p4dm3',
points: 1000,
profiles: [{
name: 'Queen',
User_Profile: {                                       // <-------------- JOIN TABLE
selfGranted: true                                 // extra join table field
}
}]
}, {
include: Profile
});

在typeform中使用自定义连接表字段保存这种负载的最佳方法是什么?

查看设置cascade: true时是否保存相关数据。都在文档中:https://orkhan.gitbook.io/typeorm/docs/relations#cascades

注意:不能用于自定义连接表。

还要注意,使用cascade: true通常不是一个好主意。例如,您需要小心不要通过保存空数组意外地擦除关系,或者不要保存重复的数据。我喜欢把不同的东西分开保存。

最新更新