javascript - GraphQL AWS Amplify @connection 未引入连接数据

标签 javascript amazon-web-services graphql amazon-dynamodb aws-amplify

我想在联赛表中列出所有赛季和分区,正如您在 data > seasons 中看到的那样.我已经设置了它,因为我相信它可以使用@connection。
所以问题是,我将如何更改我的划分模式,以便将划分包含在 League 中.
我花了很长时间阅读 @connections & @key并了解当使用 key 时,会使用 ID 创建散列。我已经给了他们。但是我多次阅读连接文档后对为什么这不起作用的理解不够。
我很想更好地理解这一点,所以我尽我所能去尝试理解!
n.b 我相信值得一提的是,每次我更改架构和 amplify mock重建哈希键,它们被添加。我想知道这是否有一些影响?当涉及到键时,我是否应该在每次架构更改时完全清理 SQLite?
enter image description here
联赛模式

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": []
                }
              },
            ]
          }
        }
      ]
    }
  }
}
编辑
由于仅将除法上的键减少到 seasonIDleagueID在每个键上,清除数据时似乎会引发异常错误。我曾相信 @connection 上的 return null 是完全有效的?
enter image description here

最佳答案

也许这应该是评论而不是实际答案,但我需要描述架构,如果您认为合适,我稍后会删除它。
杰米,只是为了测试,你能试试下面的模式吗?与纳德提出的架构基本相同,只是去掉了 name 字段。来自 keyDivision :

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 运行查询来激发.

关于javascript - GraphQL AWS Amplify @connection 未引入连接数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64234829/

相关文章:

javascript - 使用 NodeJS 访问 OneDrive for Business Javascript 无响应

sql-server - 将数据库和 Web 服务器分开时,RDS 性能真的很差吗?

amazon-web-services - Kubernetes "unauthorized: authentication required"

javascript - 即使缺少所需模式的部分,GraphQL POST 也会通过

php - 带有返回 json 的 ajax 调用永远不会成功

javascript - JavaScript 中警报函数的意外行为

python - 我可以从 GraphQL 模式生成 REST 服务吗?

aws-lambda - TypeGraphQl:与 Netlify 函数/AWS Lambda 一起使用

javascript - 使用 Nashorn/JavaScript 创建 Java GUI 应用程序

amazon-web-services - 在 DynamoDB GlobalTable CloudFormation 模板中添加标签