【问题标题】:How to add create an entity inside another entity (NestJS)?如何在另一个实体(NestJS)中添加创建实体?
【发布时间】:2021-04-12 09:13:33
【问题描述】:

我有两个实体:具有 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);
  }

【问题讨论】:

  • 你能分享你的createPhotoDto吗?
  • @Youba 导出类 CreatePhotoDto { url: string }

标签: javascript rest controller backend nestjs


【解决方案1】:

我从 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'],});
    }

【讨论】:

  • 谢谢。但困难的方法是什么?哪个更好?
  • 我只是用“最简单的方式”将这个解决方案描述为一个更干净的解决方案,正如你所看到的,我们是从 imageRepository 端而不是用户端的一行中完成的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多