Как получить данные левой таблицы с помощью mikro-orm и nestjs

#node.js #nestjs #mikro-orm

Вопрос:

Пожалуйста, найдите ниже пример кода из двух таблиц книги и автора, и я хочу перечислить все книги вместе с подробным описанием автора,

Книга

 @Entity()
export class Book{

  @PrimaryKey()
  id!: number;

  @Property()
  title!: string;

  @ManyToOne({ entity: () => Author }) // or use options object
  author!: Author;

}
 

Автор:

 @Entity()
export class Author {

  @PrimaryKey()
  id!: number;

  @Property()
  createdAt: Date = new Date();

  @Property({ onUpdate: () => new Date() })
  updatedAt: Date = new Date();

  @Property()
  name!: string;

  @Property()
  email!: string;

  @Property({ nullable: true })
  age?: number;

  @Property({ nullable: true })
  identities?: string[];

  @Property({ nullable: true })
  born?: Date;

  @OneToMany({ entity: () => Book, mappedBy: 'author', orphanRemoval: true })
  books = new Collection<Book>(this);

  @Property({ version: true })
  version!: number;

  constructor(id: number, name: string) {
    this.id = id;
    this.name = name;
  }

}
 

Обслуживание:

 @Injectable()
export class AppService {
  constructor(
    private readonly orm: MikroORM,
    private readonly em: EntityManager,
  ) {}

  async findBooks(): Promise<any> {
    const books: Book[] = await this.orm.em.find(Book, {});
    return books;
  }
}
 

В настоящее время я получаю результат типа: Ref { id: 4}, но я хочу получить все сведения об авторе вместе с идентификатором.

Пожалуйста, исправьте на странице обслуживания, если это возможно.

Ответ №1:

Вы можете заполнить все отношения, передав populate: true

Нравится:

 const result = await this.bookRepository.findAll({ populate: true });
 

Это вернет список всех книг с заполненными сведениями об авторе.


Редактировать:

Если вы используете EntityManager, то вы можете использовать его следующим образом:

 const books: Book[] = await this.orm.em.find(Book, {}, { populate: true });
 

Комментарии:

1. можете ли вы обновить его в блоке служебного кода

2. Да, вы можете сослаться на ответ, я его обновил.

3. Большое вам спасибо за ваше драгоценное время, для меня это работает.