提问人:Dave 提问时间:10/20/2023 更新时间:10/20/2023 访问量:26
使用 NestJS 和 TypeORM,我可以将 ID 传递给@ManyToOne关系吗?
With NestJS and TypeORM, can I get away with passing an ID to a @ManyToOne relation?
问:
我正在使用 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”对象。有没有更有效的方法可以避免我进行不必要的数据库查找调用?
答:
0赞
Hai Alison
10/20/2023
#1
您只需使用:并保存它createCardDto.author = { id: userId }
评论
0赞
Hai Alison
10/20/2023
但您应该首先找到 OneByOrFail,以防止在数据库中不存在 userId 时发生关系冲突
0赞
Dave
10/22/2023
问一个愚蠢的问题——如果我有一个 PostGres 约束“FOREIGN KEY (author_id) REFERENCES ”user“(id)”,为什么我需要这样做?如果用户 ID 不存在,这将导致 INSERT 失败,不是吗?
评论