Как запросить и изменить поля «многие ко многим» в моей таблице?

#typescript #graphql #nestjs #apollo #typeorm

Вопрос:

Я новичок в 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». Как установить отношения между авторами и книгами? Не только между абстрактным автором и абстрактной книгой, но и укажите, что этот автор с идентификатором: x написал книгу с идентификатором: y? Другими словами: как я могу заполнить таблицу «authors_books_books» данными?

Ответ №1:

Typeorm технически имеет встроенные способы справиться с этим…

Тем не менее, я предпочитаю быстрый способ, который не требует наличия объектов:

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