javascript - GraphQL AWS Amplify @connection 未引入连接数据
问题描述
如您所见,我希望在联赛表中列出所有赛季和分区data > seasons
。我已经设置了它,因为我相信它可以使用@connection。
所以问题是,我将如何更改我的部门架构,以便将部门包含在League
.
我花了很长时间阅读@connections和@keyID
并了解在使用密钥时会使用我给他们的密钥创建哈希。但是我多次阅读连接文档后,我对为什么这不起作用的理解不够。
我很想更好地理解这一点,所以我尽我所能去理解!
nb 我相信值得一提的是,每次我更改架构并amplify mock
重建哈希键时,它们都会被添加。我想知道这是否有一些影响?当涉及键时,我是否应该在每次架构更改时完全清理 SQLite?
联赛模式
type League @model
{
id: ID!
name: String!
faId: ID!
logo: String
seasons: [Season] @connection(keyName: "bySeason", fields: ["id"])
division: [Division] @connection(keyName: "byDivision", fields: ["id"])
}
四季沙马
type Season @model @key(name: "bySeason", fields: ["leagueID"])
{
id: ID!
name: String!
faId: ID!
yearStart: AWSDate
yearEnd: AWSDate
leagueID: ID!
league: League! @connection(fields: ["leagueID"])
division: [Division] @connection(keyName: "byDivision", fields: ["id"])
}
划分模式
type Division @model
@key(name: "byDivisionFromSeason", fields: ["leagueID" "name"])
@key(name: "byDivision", fields: ["seasonID", "leagueID"])
{
id: ID!
name: String!
faId: ID!
divisionSeasonFaId: String
leagueID: ID!
seasonID: ID!
league: League! @connection(fields: ["leagueID"])
season: Season! @connection(fields: ["seasonID"])
teams: [TeamConnection] @connection(keyName: "byTeamDivision", fields: ["id"])
games: [Game] @connection(keyName: "byGameForDivision", fields: ["id"])
ageInput: String!
level: Int!
}
查询
listLeagues {
items {
name
division {
items {
name
}
}
seasons {
items {
name
division {
items {
name
}
}
}
}
}
}
数据
我在这里证明了结构是正确的,因为Seasons
包含League
在Divisions
其中
{
"data": {
"listLeagues": {
"items": [
{
"name": "Southern Amateur League",
"division": {
"items": []
},
"seasons": {
"items": [
{
"name": "2020-21",
"division": {
"items": [
{
"name": "Junior Section Division 5B South"
},
{
"name": "Junior Section Division 4 South"
},
{
"name": "Intermediate Division 3"
},
]
}
},
{
"name": "2019-20",
"division": {
"items": []
}
},
]
}
}
]
}
}
}
编辑
由于仅将除法上的键减少到seasonID
每个leagueID
键上,因此在清除数据时似乎会引发异常错误。我曾相信 @connection 上的 return null 是完全有效的?
解决方案
也许这应该是评论而不是实际答案,但我需要描述架构,如果您认为合适,我稍后会删除它。
杰米,只是为了测试,你能试试下面的模式吗?它基本上与 Nader 提出的模式相同,只是name
从key
s on 中删除了该字段Division
:
type League @model
{
id: ID!
name: String!
faId: ID!
logo: String
seasons: [Season] @connection(keyName: "bySeason", fields: ["id"])
division: [Division] @connection(keyName: "byDivision", fields: ["id"])
}
type Season @model @key(name: "bySeason", fields: ["leagueID"])
{
id: ID!
name: String!
faId: ID!
yearStart: AWSDate
yearEnd: AWSDate
leagueID: ID!
league: League! @connection(fields: ["leagueID"])
division: [Division] @connection(keyName: "byDivisionFromSeason", fields: ["id"])
}
type Division @model
@key(name: "byDivisionFromSeason", fields: ["seasonID", "leagueID"])
@key(name: "byDivision", fields: ["leagueID", "seasonID"])
{
id: ID!
name: String!
faId: ID!
divisionSeasonFaId: String
leagueID: ID!
seasonID: ID!
league: League! @connection(fields: ["leagueID"])
season: Season! @connection(fields: ["seasonID"])
teams: [TeamConnection] @connection(keyName: "byTeamDivision", fields: ["id"])
games: [Game] @connection(keyName: "byGameForDivision", fields: ["id"])
ageInput: String!
level: Int!
}
我认为您获得的错误,即:
"errors": [ { "message": "Query condition missed key schema element", "errorType": "DynamoDB:ValidationException", "data": null, "errorInfo": null, "path": [ "listLeagues", "items", 1, "division" ], "locations": [ { "line": 10, "column": 9, "sourceName": "GraphQL request" } ] }
可以通过使用条件运行查询来激发name
。
推荐阅读
- java - Openfire websocket内存泄漏
- c++ - c ++复制二维数组的一部分
- r - 描绘供应网络结构
- umbraco - 允许用户在 Umbraco 输入控件的内容中输入法语、西班牙语和韩语
- javascript - 如何在异步函数中访问双嵌套数组中的数据 - javascript?
- hive - 如何在没有写权限的情况下使用 hive 将数据库表数据从 hdfs 导出到本地 csv
- python - Tensorflow - 如何将 int32 转换为字符串(使用 Python API for Tensorflow)
- apache-spark - DCOS 集群上的 Spark 提交失败并出现 java.net.UnknownHostException: hdfs
- php - 按 ID 排序帖子属于多个关系
- sql - 如何找到最少的学生群体