5

我在更新解析器中的数组时遇到了一些问题。我正在与typescript.

描述

我在datamodel.graphqlfor Prisma

type Service @model {
    id: ID! @unique
    title: String
    content: String
    createdAt: DateTime!
    updatedAt: DateTime!
    comments: [Comment!]! // Line to be seen here
    author: User!
    offer: Offer
    isPublished: Boolean! @default(value: "false")
    type: [ServiceType!]!
}

type Comment @model {
    id: ID! @unique
    author: User! @relation(name: "WRITER")
    service: Service!
    message: String!
}

Prisma连接到服务器,在这GraphQl一个中,我定义了突变:

commentService(id: String!, comment: String!): Service!

因此,是时候为给定的突变实现解析器了,我正在这样做:

async commentService(parent, {id, comment}, ctx: Context, info) {
    const userId = getUserId(ctx);
    const service = await ctx.db.query.service({
        where: {id}
    });
    if (!service) {
        throw new Error(`Service not found or you're not the author`)
    }

    const userComment = await ctx.db.mutation.createComment({
        data: {
            message: comment,
            service: {
                connect: {id}
            },
            author: {
                connect: {id:userId}
            },
        }
    });

    return ctx.db.mutation.updateService({
        where: {id},
        data: {
            comments: {
               connect: {id: userComment.id}
            }
        }
    })
}

问题 :

我在查询操场时收到的唯一信息是null我给出的评论。

感谢您阅读到目前为止。

4

2 回答 2

3

你能分享你暴露突变解析器的代码吗?如果您忘记在突变解析器对象中包含解析器,您可能会得到null响应。commentService

除此之外,我在代码中看到了另一个问题。Service由于您在and之间有关系Comment,因此您可以使用单一突变来创建评论并将其添加到服务中。您不需要编写两个单独的突变来实现这一点。您的解析器可以更改为如下所示的简单:

async commentService(parent, {id, comment}, ctx: Context, info) {
    const userId = getUserId(ctx);

    return ctx.db.mutation.updateService({
        where: {id},
        data: {
            comments: {
               create: {
                   message: comment,
                   author: {
                      connect: {id:userId}
                   }
               }
            }
        }
    })
}

请注意,我还删除了查询以在执行更新之前检查服务是否存在。原因是,updateService 绑定调用会在它不存在的情况下抛出错误,我们不需要显式检查。

于 2018-09-24T07:49:40.837 回答
1

如果我正确理解了这个问题,那么您正在调用此commentService突变并且结果为 null?按照你的逻辑,你应该得到任何ctx.db.mutation.updateService解决方案,对吧?如果您期望它确实是一个Service对象,那么您可能无法取回它的唯一原因是缺少await. 您可能需要编写return await ctx.db.mutation.updateService({ ....

于 2018-09-23T09:13:16.940 回答