我正在使用 NestJS 10 和 typeorm 0.3.17。我拥有这个实体...
@Entity()
export class Card {
@PrimaryGeneratedColumn('uuid')
id: string;
@ManyToOne(type => User)
@JoinColumn({name: 'owner_id', referencedColumnName: 'id'})
author: User;
...
}
及其对应的DTO ...
export class CreateCardDto {
author: User,
category: Occasion;
title: string;
frontImg: Buffer;
frontImgAltText: string;
backImg: Buffer;
backImgAltText: string;
}
我有一个控制器方法,我可以根据请求对象中存储的内容设置用户......
@Post()
async create(@Req() req: Request, @Body() createCardDto: CreateCardDto) {
const userId = req.user['sub'];
const user = await this.usersService.findById(userId);
createCardDto.author = user;
return this.cardsService.create(createCardDto);
}
然后将对象保存在服务方法中...
async create(createCardDto: CreateCardDto): Promise<Card> {
return this.cardRepository.save(createCardDto);
}
我想知道的是在控制器方法中,我使用 ID 查找用户对象
const user = await this.usersService.findById(userId);
但这似乎有点浪费,因为我只需要在目标对象中保存ID,但由于“@ManyToOne”关系,我在实体中定义了一个“User”对象。有没有更有效的方法可以避免我进行不必要的数据库查找调用?
您只需使用:
createCardDto.author = { id: userId }
并保存它