用于 graphql 和 prisma 查询的嵌套解析器

Nested resolver for graphql & prisma query

谁能建议如何着手创建嵌套解析器以显示通过 graphql 保存在父对象中的对象数组。

在这种情况下,我的 schema.prisma 文件 有两个模型 GiftCard 和 Transaction,其中每个 GiftCard 都有一个分类账(交易数组):

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model GiftCard {
 id            Int
 number        String
 ledger        Transaction[]
}

model Transaction {
 id            Int
 value         Decimal
 giftCard      GiftCard? @relation(fields: [giftCardId], references: [id])
 giftCardId    Int?
}

我的 graphql 类型定义:

type Query {
  cards: [GiftCard!]!
  transactions: [Transaction!]!
}

type GiftCard {
  id: ID!
  number: String!
  ledger: [Transaction!]!
}

type Transaction {
    id: ID!
    value: Float!
}

我的解析器:

export const resolvers = {
  Query: {
    cards: async (parent, args, context) => {
      return context.prisma.GiftCard.findMany();
    },
    vendors: async (parent, args, context) => {
      return context.prisma.Vendor.findMany();
    },
    transactions: async (parent, args, context) => {
      return context.prisma.Transaction.findMany();
    },
  },

    GiftCard: {
      ledger: async (parent, args, context) => {
        //   return transaction associated with gift card here...
          },
    },
};

如果我在没有请求“分类帐”字段的情况下查询卡或交易,则查询从 apollo studio 完美运行。

任何帮助都会很棒!

谢谢。

好消息!在 prisma 文档中我找到了解决方案,它不是嵌套的解析器。 Prisma 在解析器内部默认不启用相互关系。你必须强制它包含它们,这样我的解析器现在看起来像这样,我的所有交易都显示在 graphql 查询中:

export const resolvers = {
  Query: {
    cards: async (parent, args, context) => {
      return context.prisma.GiftCard.findMany({
        include: { ledger: true },
      });
    },}