我想把所有的赛季和分区都列在联赛表上,就像你在data > seasons看到的那样。我已经设置好了,我相信使用@connection就可以了。
因此,问题是,我必须如何更改我的分区模式,以便将分区包含在League中。
我花了很长时间阅读了@connections和@key,并理解了当使用密钥时,哈希是用我给他们的ID创建的。但是,在多次阅读connections文档之后,我还是不太理解为什么这个方法不起作用。
我很想更好地理解这一点,所以我正在尽我所能去尝试发展一种理解!
注:我认为值得一提的是,每次我更改模式和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"])
}Schama季节
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
}
}
}
}
}
}数据
我在这里展示了该结构是正确的,因为League中包含的Seasons如预期的那样具有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是完全有效的?

发布于 2020-10-26 07:39:25
也许这应该是一个评论而不是一个实际的答案,但我需要描述这个模式,如果你认为合适的话,我会在稍后删除它。
Jamie,只是为了测试,你能试试下面的模式吗?它基本上与纳德提出的模式相同,只是从Division上的key中删除了字段name
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运行查询来激发。
https://stackoverflow.com/questions/64234829
复制相似问题