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 找到更多详细信息。
我有这个数据模型:
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 找到更多详细信息。