javascript - 如何在另一个实体(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);
}
解决方案
我从 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'],});
}
推荐阅读
- angular - 如何允许文本框在其输入中接受 0-6 和 X 的模式,最大长度为 6?
- javascript - 如何在html页面上显示json响应数组
- couchbase - 索引器进程重新启动后,正在从持久的磁盘快照加载索引
- javascript - 为什么这两个代码运行不一样?
- android - 致命异常:java.lang.IllegalStateException:尝试重新打开已经关闭的对象:SQLiteDatabase:
- c# - 如何使用 C# 将 Java 输入弹出到前台
- python - 将所有python函数参数转换为json的快速方法
- angular - Angular 9 的国际电话输入
- android - Firebase Messaging:使用云功能向所有应用用户发送数据消息
- python - Python selenium scrape tradingview 交易列表