Prisma graphql 计算字段

Prisma graphql computed fields

我有这个数据模型:

type Item {
  id: ID! @unique
  title: String!
  description: String!
  user: User!
  pictures: [Picture]
  basePrice: Int!
  addons: [Addon]
}

我正在编写一个名为 parsedItem 的查询,它从参数中获取 id 并查找项目(使用 Prisma 生成的项目的默认查询),如下所示:

 const where = { id: args.id };
 const item = await ctx.db.query.item({ where }, 
    `{
      id
      title
      ...

我需要在前端显示一个计算值:"dynamicPrice" 它取决于项目拥有的插件数量。 例如: Item #1 有 3 个插件,每个插件价值 5 美元。这个计算值应该是

dynamicPrice = basePrice + 3 * 5

插件关系可能会改变,所以我需要在前端发出的每个请求中计算它。

我非常想做这样的事情:

item.dynamicPrice = item.basePrice + (item.addons.length * 5)

和 return 这个 item 在解析器中,但这不起作用。抛出一个错误:

"message": "Cannot query field \"dynamicPrice\" on type \"Item\"." (when I try to query the Item from the frontend)

此错误消息让我思考:我是否应该将 dynamicPrice 创建为数据模型上的一个字段?然后我可以在查询解析器中填充这个字段吗?我知道我可以,但这是一个好方法吗?

这是一个示例,我需要为此项目模型创建更多计算值。

这个简单用例的最佳可扩展性solution/workaround是什么?

您需要为 Item 类型的 dynamicPrice 字段创建 字段解析器。它看起来像这样:

const resolvers = {
  Query: {
    parsedItem: (parent, args, ctx, info) => {
      ...
    }
    ...
  },
  Item: {
    dynamicPrice: parent => parent.basePrice + parent.addons.length * 5
  }
}

您可以在 A Guide to Common Resolver Patterns 找到更多详细信息。