如何在 GraphQL 中使用变异方法在模型中创建关系?

Posted

技术标签:

【中文标题】如何在 GraphQL 中使用变异方法在模型中创建关系?【英文标题】:How to create a relations in models with mutation method in GraphQL? 【发布时间】:2020-11-21 23:45:09 【问题描述】:

我正在使用 GraphQL 创建一个电子商务 API。我的棱镜架构是

model Product 
  id          Int      @id @default(autoincrement())
  createdAt   DateTime @default(now())
  name        String
  price       Int
  stocks      Int      



model User 
  id       Int    @id @default(autoincrement())
  name     String
  email    String @unique
  password String
  Orders   Order[]



model Order

  id     Int  @id @default(autoincrement())
  product   Product @relation(fields: [productId], references: [id])
  productId Int
  user   User @relation(fields: [userId], references: [id])
  userId Int
  @@unique([productId, userId])


为了在用户订购产品时创建关系,我的 graphql 架构和解析器函数应该是什么?

【问题讨论】:

【参考方案1】:

您的架构实际上应该如下所示:

model Product 
  id        Int      @id @default(autoincrement())
  name      String
  price     Int
  stocks    Int
  orders    Order[]
  createdAt DateTime @default(now())


model User 
  id       Int     @id @default(autoincrement())
  name     String
  email    String  @unique
  password String
  orders   Order[]


model Order 
  id        Int     @id @default(autoincrement())
  product   Product @relation(fields: [productId], references: [id])
  productId Int
  user      User    @relation(fields: [userId], references: [id])
  userId    Int
  @@unique([productId, userId])

您的 GraphQL 突变应该包含作为变量传递的用户 ID 和产品 ID,您的解析器应该如下所示:

  await prisma.user.update(
    where: 
      id: 1,
    ,
    data: 
      orders: 
        create: 
          product: 
            connect: 
              id: 123,
            ,
          ,
        ,
      ,
    ,
  )

这将为用户 ID 1 创建一个新订单,并将产品 ID 123 添加到订单中。

【讨论】:

以上是关于如何在 GraphQL 中使用变异方法在模型中创建关系?的主要内容,如果未能解决你的问题,请参考以下文章

变异时如何修复“猫鼬模型的名称”不是graphql中的构造函数

如何在 GraphQL 中创建删除突变?

没有参数的 Graphql 突变

如何使用 schema.graphql 在放大数据存储中创建多对多关系

如何结合突变在 django-graphql-jwt 中创建或登录用户?

如何在不创建 Mongoose 模型的情况下将 GraphQL 与 Mongoose 和 MongoDB 一起使用