我如何在插入数据的同时保持使用Arizona的实体之间的关系?

时间:2020-07-07 20:41:17

标签: nestjs prisma

在提出问题之前,对于语法可能很奇怪的部分,我的语言不是英语,我感到抱歉。

最近,我正在通过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,
}

1 个答案:

答案 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
                }
            }
        }
    })