Как создать отношения в моделях с методом мутации в GraphQL? - PullRequest
2 голосов
/ 01 августа 2020

Я создаю api электронной коммерции, используя GraphQL. Моя схема призмы:

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 Ответ

1 голос
/ 01 августа 2020

Ваша схема должна выглядеть так:

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 должна содержать идентификатор пользователя и идентификатор продукта, передаваемые как переменные, и ваш преобразователь будет выглядеть так:

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

Это создаст новый заказ для идентификатора пользователя 1 и добавит в заказ идентификатор продукта 123 .

...