如何使用 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 });
请在下面找到两本 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 });