javascript - Graphql 嵌套突变
问题描述
我正在构建一个 Graphql 模式来变异/查询餐厅,并尝试将开放时间存储在嵌套对象中。
结构应如下所示:
[
{
monday: { open: restaurant.Open_Monday, close: restaurant.Close_Monday }
},
{
tuesday: { open: restaurant.Open_Tuesday, close: restaurant.Close_Tuesday }
},
{
wednesday: { open: restaurant.Open_Wednesday, close: restaurant.Close_Wednesday }
},
{
thursday: { open: restaurant.Open_Thursday, close: restaurant.Close_Thursday }
},
{
friday: { open: restaurant.Open_Friday, close: restaurant.Close_Friday }
},
{
saturday: { open: restaurant.Open_Saturday, close: restaurant.Close_Saturday }
},
{
sunday: { open: restaurant.Open_Sunday, close: restaurant.Close_Sunday }
},
]
restaurant 变量包含 I' 的营业时间值,在将它们发送到 API 并存储它们之前进行格式化。
我的 Graphql 架构如下所示:
input RestaurantInput {
key: Int!
name: String!
image: String!
telNumber: String!
bookingNumber: String
address1: String!
address2: String
suburb: String!
province: String!
postalCode: String
days: [DayInput]
cuisine: String
exclusions: String
restrictions: String
breakfast: String
lunch: String
supper: String
longitude: String
latitude: String
}
input DayInput {
monday: [TimeInput]
tuesday: [TimeInput]
wednesday: [TimeInput]
tursday: [TimeInput]
friday: [TimeInput]
saturday: [TimeInput]
sunday: [TimeInput]
}
input TimeInput {
open: String
close: String
}
当我点击该 API 端点时,我收到以下错误消息:
Expected type [DayInput], found "[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]".
我不确定我的调用是否格式不正确,或者我是否在架构本身中犯了错误。我对 Graphql 还是很陌生,并且坚持这一点。
解决方案
您看到该错误是因为您的输入结构与您的架构不匹配。架构中的方括号 ( []
) 表示一个列表——如果您将输入类型包装在方括号中,则相应的输入应该是一个数组。要拥有与您显示的数组匹配的架构,您应该从 around 删除括号TimeInput
:
input RestaurantInput {
days: [DayInput]
# other fields
}
input DayInput {
monday: TimeInput
tuesday: TimeInput
wednesday: TimeInput
thursday: TimeInput
friday: TimeInput
saturday: TimeInput
sunday: TimeInput
}
input TimeInput {
open: String
close: String
}
但是,您也可以考虑完全简化此结构:
input RestaurantInput {
days: DayInput # <---- remove the List here
# other fields
}
input DayInput {
monday: TimeInput
tuesday: TimeInput
wednesday: TimeInput
thursday: TimeInput
friday: TimeInput
saturday: TimeInput
sunday: TimeInput
}
input TimeInput {
open: String
close: String
}
然后,您可以只发送一个普通对象,而不使用数组:
{
monday: { open: restaurant.Open_Monday, close: restaurant.Close_Monday },
tuesday: { open: restaurant.Open_Tuesday, close: restaurant.Close_Tuesday },
wednesday: { open: restaurant.Open_Wednesday, close: restaurant.Close_Wednesday },
thursday: { open: restaurant.Open_Thursday, close: restaurant.Close_Thursday },
friday: { open: restaurant.Open_Friday, close: restaurant.Close_Friday },
saturday: { open: restaurant.Open_Saturday, close: restaurant.Close_Saturday },
sunday: { open: restaurant.Open_Sunday, close: restaurant.Close_Sunday },
},
推荐阅读
- sql - 如何查看在 SQL 中复制的内容
- sql-server - 对选定行进行累积计算的 SQL SELECT
- android - 如何通过可重用的 RecyclerView 适配器使用 SQLite 数据
- pandas - 在机器学习中缩放 ID 列?
- google-app-engine - 使用 GCP API 密钥限制对特定 GCP App Engine 服务的访问?
- django - 创建 django 查询集快照的最有效方法?
- java - 如何在不使用数组的情况下对数字进行排序?
- c# - 如何将三个不同的管理员用户链接到一篇文章?
- python-3.x - 我怎样才能松开单词之间的空格而不松开短语之间的空格
- regex - 用 Google BigQuery 中的文字替换正则表达式字符