javascript - 嵌套查询 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 应该返回这 2 个食谱,但如果用户通知 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')
}
}
}
使用这个解析器模块,我在“recipe”查询解析器上创建了一个新过滤器,它接收成分的“名称”来制作过滤器并将其传递给服务以在数据库中实现过滤器。
感谢您的支持。
推荐阅读
- javascript - 为什么我的导航栏没有在页面上完全扩展宽度?
- excel - 从活动单元格循环到第一个空单元格
- angularjs - 尝试扩展 p5.js 库时,超级关键字不适用于变量
- azure - 需要帮助确定在 Azure 开发测试实验室中创建虚拟机的成本以及安装所需软件的可用性
- python - Python3中自动创建字典分支
- python - 在 Django 应用程序中从服务器下载文件
- java - 优化代码以找到给定数 N 的阶乘的个位
- spring-boot - 可以将两个 camunda 实例连接到同一个数据库吗?
- python - pip install Flask 在我的环境中不起作用
- r - 将参数传递给R中网状结构的python函数