使用 NestJS 和 TypeORM,我可以将 ID 传递给 @ManyToOne 关系吗?

问题描述 投票:0回答:1

我正在使用 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”对象。有没有更有效的方法可以避免我进行不必要的数据库查找调用?

nestjs typeorm relation many-to-one
1个回答
0
投票

您只需使用:

createCardDto.author = { id: userId }
并保存它

© www.soinside.com 2019 - 2024. All rights reserved.