如何解决嵌套查询GraphQl
我是使用graphql的新手,我想知道如何过滤查询以获取在输入数组中具有某些成分对象的配方。
这是schema.gql文件
type Recipe {
id: Int
title: String!
author: String
link: String
category: String
subcategory:String
ingredients:[Ingredients]
}
type Ingredients{
id:Int
name:String!
quantity:Float!
measure:String
observation:String
}
type Query {
recipe: [Recipe]
ingredient:[Ingredients]
}
此配方模式具有1个相应的服务
const db = require('../db')
class RecipeService{
//PENDENTE FINALIZAR ESSA SERVICE
async getRecipeByIngredient(ingredient)
}
和相应的查询解析器
Recipe: {
async ingredients(recipe,_,{ dataSources }) {
return await dataSources.IngredientService.getRecipeIngredients(recipe.id)
},},Query: {
recipe: async () => db('Recipe'),ingredient: async () => db('Ingredient'),}
这里的主要思想是拥有一个过滤器,该过滤器可以查看哪种配方具有用户可以通过APP通知的某些成分。
我得到了数据库中所有配方的“配方”查询,但是我需要一个查询来获取这些配方并进行过滤,然后使用字段成分进行查询,例如:
- 食谱-糖糕,配料:糖,蜂蜜,四种...
- 食谱-天鹅绒蛋糕,配料:糖,香草,...
并且用户通知Sugar,API应该返回这两个配方,但是如果用户通知Sugar,Honey和Four,则API仅返回选项1。
有人可以帮我吗?
非常感谢。
解决方法
我对此有一个解决方案,我想与您分享。
我在解析器上实现的过滤器:
module.exports = {
Recipe: {
ingredients(recipe,_,{ dataSources },info) {
return dataSources.IngredientService.getRecipeIngredients(recipe.id)
}
},Query: {
recipe(obj,{name},{dataSources},info) {
if (name) {
return dataSources.IngredientService.getIngredientsByName(name)
} else {
return db('Recipe')
}
},ingredient: async () => db('Ingredient'),recipeByIngredient:async () => db('Recipe'),},Mutation: {
createRecipe: async (_,{ data }) => await (await db('Recipe').insert(data).returning('*'))[0],updateRecipe: async (_,{ data,id }) => await (await db('Recipe').where({ id }).update(data).returning('*'))[0],deleteRecipe: async (_,{ filter }) => {
if (filter.id) {
return await db('Recipe').where({ id: filter.id }).delete()
}
if (filter.title) {
return await db('Recipe').where({ title: filter.title }).delete()
}
throw new Error('Should provide the ID or TITLE')
}
}
}
使用此解析器模块,我在“食谱”查询解析器上创建了一个新过滤器,该过滤器接收成分的“名称”以制作过滤器,并将其传递给服务以在数据库中实现该过滤器。
感谢支持。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。