在提出问题之前,对于语法可能很奇怪的部分,我的语言不是英语,我感到抱歉。
最近,我正在通过Nestjs和Prisma从事一个新项目。 如何在保持用户实体和发布实体之间的关系的同时输入数据?
下面的代码是定义的实体方案,也是我尝试过的。
model Post {
content String
id Int @default(autoincrement()) @id
title String
userId Int?
user User? @relation(fields: [userId], references: [id])
}
model User {
email String?
id Int @default(autoincrement()) @id
name String?
posts Post[]
}
@Injectable()
export class PostService {
constructor(private readonly prismaService: PrismaService) {}
async create(userId: number, postCreateDto: PostCreateDto) {
const {title, content} = postCreateDto;
return await this.prismaService.post.create({
data: {
title: title,
content: content,
userId: userId
}
})
}
}
@Injectable()
export class PostService{
constructor(private readonly prismaService: PrismaService) {}
async create(userId: number, postCreateDto: PostCreateDto) {
const post = await this.prismaService.post.create(postCreateDto);
return await this.prismaService.post.upsert(
{where: {id: post.id},
update: {userId: +userId}})
}
}
这是我使用的dto
export interface PostCreateDto {
title: string,
content: string,
}
答案 0 :(得分:1)
我想您是在问您通常如何处理Prisma Client中的关系。问题是您试图直接写入userId
字段。这是当前无法实现的。相反,您必须使用字段user
和特殊关系操作之一来进行嵌套写入。记录在here中。
因此,我建议将您的Prisma客户电话更改为以下内容。这些示例没有使用直接连接到另一条记录的userId
操作,而是直接提供了connect
字段。然后,这将更新数据库内部的userId
字段。
// for 1.
return await this.prismaService.post.create({
data: {
title: title,
content: content,
user: {
connect: {
id: userId
}
}
}
})
// for 2.
return await this.prismaService.post.upsert(
{
where: { id: post.id },
update: {
user: {
connect: {
id: userId
}
}
}
})