如何使用 mikro-orm 和 nestjs 获取左 table 数据

How to get left table data using mikro-orm and nestjs

请在下面找到两本 table 书籍和作者的代码示例,我想列出所有书籍以及作者详细信息,

Book

@Entity()
export class Book{

  @PrimaryKey()
  id!: number;

  @Property()
  title!: string;

  @ManyToOne({ entity: () => Author }) // or use options object
  author!: 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;
  }

}

Service:

@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 } 但我想获取所有作者详细信息以及 id。

如果可能,请在服务页面更正。

您可以通过传递 populate: true

来填充所有关系

喜欢:

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

这将 return 包含作者详细信息的所有书籍的列表。


编辑:

如果您使用的是 EntityManager,那么您可以这样使用它:

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