通过多对一关系引用另一个实体的 Dto 属性?

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

我有 2 个实体通过一对多/多对一关系相互关联。对于这个例子,我们称它们为用户和照片。

一个用户有很多照片,很多照片有一个用户

@Entity({ name: 'user' })
export class User {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column({ type: 'varchar' })
  name: string;

  @OneToMany(() => Photo, photo => photo.user, { cascade: true, onDelete: 'CASCADE', onUpdate: 'CASCADE' })
  photos: Photo[];
}

@Entity({ name: 'photo' })
export class Photo {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @Column({ type: 'varchar' })
  name: string;

  @ManyToOne(() => User, user => user.photos)
  @JoinColumn({ name: 'userId', referencedColumnName: 'id' })
  user: User;
}

现在,在我的控制器中,我有一个像这样的 body dto:

@Controller('general_path')
export class MyController {
  constructor(private myService: MyService) {}

  @Post('/sub_path')
  async addPhoto(@Body() body: PhotoDto): Promise<Photo> {
    return await this.myService.addPhoto(body);
  }
}

我的问题是: 考虑到当发出帖子请求时,我希望帖子正文包含新照片的名称以及它将绑定到的用户的 ID,我的 PhotoDto 应该是什么样子?

export class PhotoDto {
  @IsString()
  @IsNotEmpty()
  name: string;

  userId: string
}

更具体地说,如何在 dto 中指定 userId 是引用另一个实体的 id(多对一关系的 bc)?

nestjs entity typeorm one-to-many dto
© www.soinside.com 2019 - 2024. All rights reserved.