Graphql 如何使用prisma nexus解析自定义嵌套扩展类型解析器?

Graphql 如何使用prisma nexus解析自定义嵌套扩展类型解析器?,graphql,prisma,prisma-graphql,nexus-prisma,Graphql,Prisma,Prisma Graphql,Nexus Prisma,我需要从prisma类型解析自定义解析程序。但我无法访问本例中的儿童课程或科目,我的个人类型只能解析一个级别的数据 副署长: 数据模型: type Person { id: ID! @unique firstName: String! secondName: String firstSurname: String! secondSurname: String sex: SexTypes address: String commune: Commune regi

我需要从prisma类型解析自定义解析程序。但我无法访问本例中的儿童课程或科目,我的个人类型只能解析一个级别的数据

副署长:

数据模型:

type Person {
  id: ID! @unique
  firstName: String!
  secondName: String
  firstSurname: String!
  secondSurname: String
  sex: SexTypes
  address: String
  commune: Commune
  region: Region
  course: Course
  phone: String
  state: StudentStateTypes @default(value: ACTIVE)
  user: User! @relation(name: "UserPerson", onDelete: CASCADE)
  birthday: DateTime
  registrationNumber: String
  listNumber: Int
  previousSchool: OtherSchool
  scholarship: Scholarship
  createdAt: DateTime!
  updatedAt: DateTime!
}

type Course {
  id: ID! @unique
  client: Client
  name: String!
  person: [Person!]!
  teacher: User
  subjects: [Subject!]!
  evaluations: [Evaluation!]!
  createdAt: DateTime!
  updatedAt: DateTime!
}

type Subject {
  id: ID! @unique
  client: Client
  name: String!
  date: DateTime
  isEvaluable: Boolean
  order: Int
  course: [Course!]!
  evaluations: [Evaluation!]!
  createdAt: DateTime!
  updatedAt: DateTime!
}

type Evaluation {
  id: ID! @unique
  client: Client
  name: String!
  date: DateTime!
  period: Int!
  description: String
  coefficientTwo: Boolean
  course: Course!
  subject: Subject
  qualifications: [Qualification!]! @relation(name: "EvaluationQualification", onDelete: CASCADE)
  createdAt: DateTime!
  updatedAt: DateTime!
}

type Qualification {
  id: ID! @unique
  client: Client
  value: Float!
  evaluation: Evaluation! @relation(name: "EvaluationQualification", onDelete: SET_NULL)
  person: Person
  createdAt: DateTime!
  updatedAt: DateTime!
}
我的解析器:

export const query = extendType({
  type: 'Query',
  definition (t: any) {
    t.field('qualificationsCustom', {
      type: 'Person',
      args: {
        id: idArg()
      },
      resolve: async (parent: any, args: any, ctx: any) => {
        const person = await ctx.prisma.person({ id: args.id })

        const qualifications = person && person.course.subjects.reduce((acc: any, subject: any) => {
          acc.push({
            subject: subject.name
          })
          return acc
        })
        console.log(qualifications)
      }
    })
  }
})
person变量仅解析下一个:

{
  birthday: '2008-10-27T00:00:00.000Z',
  secondName: 'Gisel',
...
和person.course未定义:/

我做错了什么?

调用prisma.person{id:args.id}只会获取请求的人。它不包含任何关联的模型。您可以使用fluent API查询特定模型实例的关系,如下所示:

甚至:

prisma.person({ id: args.id }).course().evaluations()
通过提供一个片段,指定要获取哪些字段(包括关系),还可以一次获取所有内容:


请编辑您的问题以包含数据模型,或至少包含其中的相关类型。
prisma.person({ id: args.id }).course()
prisma.person({ id: args.id }).course().evaluations()
const fragment = `
fragment PersonWithCourse on Person {
  # other person fields here
  course {
    # some course fields here
  }
}
`

prisma.person({ id: args.id }).$fragment(fragment)