#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. Большое вам спасибо за ваше драгоценное время, для меня это работает.