NestJS Typeorm从响应中筛选关系



使用Repository.save(myEntity)时,如何确保TypeOrm只返回实体本身,而不返回其关系?

给定这个例子实体

@Entity()
export class Flavor {
@ManyToMany(
type => Coffee,
coffee => coffee.flavors,
)
coffees: Coffee[];
}
@Entity()
export class Coffee {
@JoinTable()
@ManyToMany(
type => Flavor,
flavor => flavor.coffees,
)
flavors: Flavor[];
}

以及这个示例服务


async create(createCoffeeDto: CreateCoffeeDto) {
const flavors = await Promise.all(
createCoffeeDto.flavors.map(name => this.preloadFlavorByName(name)),
);
const coffee = this.coffeeRepository.create({
...createCoffeeDto,
flavors,
});
return this.coffeeRepository.save(coffee);
}

我如何过滤响应,使其只返回Coffee实体而不返回Flavor实体。例如这个

{
"id": 0,
"name": "string",
"brand": "string",
"recommendations": 0,
}

不是这个

{
"id": 0,
"name": "string",
"brand": "string",
"recommendations": 0,
"flavors": [
{
"id": 0,
"name": "string",
"coffees": [
null
]
}
]
}

实现这一点的一种方法是使用类转换器。https://github.com/typestack/class-transformer

首先,你这样定义你的响应类:

export class CreateCoffeeResponseDto {
id: number;
name: string;
brand: string;
recommendations: number;
}

然后当从服务中返回时,您可以:

return plainToClass(CoffeeCreateResponseDto, await this.coffeeRepository.save(coffee));

此外,如果在关系中放置{cascade:true}选项对象,则可以使用.save((调用来完成所有操作。https://typeorm.io/#/relations/cascades

最新更新