首页 > 解决方案 > 如何在另一个实体(NestJS)中添加创建实体?

问题描述

我有两个实体:具有 OneToMany 关系的用户和照片。一个用户可以拥有多张照片。用户:

@Entity('users')
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  firstName: string;

  @Column()
  lastName: string;

  @Exclude()
  @Column()
  password: string;

  @Column({ default: '' })
  avatar: string;

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

和照片:

@Entity('photos')
export class Photo {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  url: string;

  @Column({default: ""})
  description: string;
  
  @ManyToOne(() => User, user => user.photos)
  user: User;
}

所以,我的问题是:如何向特定用户添加新照片?我试图做这样的事情,但它没有按预期工作。

@Patch(':id/photos')
  addPhoto(@Param('id') id: number, @Body() createPhotoDto: CreatePhotoDto){
    return this.userService.createImage(id, createPhotoDto);
  }



async createImage(id: number, createPhotoDto: CreatePhotoDto) {
    const user = await this.usersRepository.findOne(id);
    const newUser = await this.usersRepository.preload({
      id: +id,
      photos: [...user.photos, createPhotoDto]
    });

    return this.usersRepository.save(newUser);
  }

标签: javascriptrestcontrollerbackendnestjs

解决方案


我从 CreatePhotoD 中得到的信息是您保存图像并将其与用户绑定,这
是最简单的方法之一,首先在您的服务中声明 imageRepository,然后:

    async createImage(id: number, createPhotoDto: CreatePhotoDto) {
     const user = await this.usersRepository.findOne(id);
      
     return   await this.imageRepository.save({url:createPhotoDto.url,user:user});
    // if you want to return the user with the image added you make another find with the relation  exp:
   //  return  await this.usersRepository.findOne(id,{ relations: ['photos'],});
    }

推荐阅读