如何查询和改变表中的“多对多”字段?

Posted

技术标签:

【中文标题】如何查询和改变表中的“多对多”字段?【英文标题】:How to query and mutate "many-to-many" fields in my table? 【发布时间】:2021-11-24 06:17:06 【问题描述】:

我是 Nestjs 的新手。我有两个实体:

@Entity( name: "Books" )
@ObjectType()
export class Book 
  @PrimaryGeneratedColumn()
  @Field()
  id: number;
  @Column()
  @Field()
  title: string;
  @ManyToMany(() => Author, (author: Author) => author.books)
  @Field(() => [Author])
  authors: Author[];

@Entity( name: "Authors" )
@ObjectType()
export class Author 
  @PrimaryGeneratedColumn()
  @Field()
  id: Number;
  @Column()
  @Field()
  firstName: string;
  @Column()
  @Field()
  lastName: string;
  @ManyToMany(() => Book, (book: Book) => book.authors)
  @JoinTable()
  @Field(() => [Book])
  books: Book[];


这会自动给我第三个空表“authors_books_books”。如何建立作者与书籍的关系?不仅在抽象作者和抽象书之间,而且指定这个作者的 id:x 写了这本书 id:y?换句话说:如何用数据填充“authors_books_books”表?

【问题讨论】:

【参考方案1】:

Typeorm 在技术上确实有 built-in ways to handle this...

也就是说,我更喜欢不需要对象的快速方法:

await this.manager.query(
    'INSERT INTO authors_books_books ("authorId", "bookId") VALUES ($1, $2)',
    [authorId, bookId],
);

【讨论】:

以上是关于如何查询和改变表中的“多对多”字段?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL选择多对多的位置

首先创建代码,多对多,关联表中的附加字段

django - 如何查询仅描述的对象存在于多对多字段中的位置

仅从 Spring Data JPA 中的联接表(多对多)中选择特定列

如何通过 Eloquent 中具有多对多关系的外部表中的列聚合进行分组?

如何查询多对多