使用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