我在解析器中更新数组时遇到了一些问题.我正在使用打字稿进行构建.
描述
我在pramma的datamodel.graphql中:
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,而不是我给出的评论.
感谢阅读,直到目前为止.
解决方法:
你可以分享你暴露突变解析器的代码吗?如果您忘记在突变解析程序对象中包含commentService解析程序,则可能会返回null.
除此之外,我在代码中再看到一个问题.由于您在服务和注释之间存在关联,因此您可以使用单个突变来创建注释并将其添加到服务中.您不需要编写两个单独的突变来实现这一目标.您的解析器可以更改为如下所示:
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绑定调用将抛出错误,如果它不存在,我们不需要显式检查.