首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GraphQL AWS AMplify @connection未引入已连接的数据

GraphQL AWS AMplify @connection未引入已连接的数据
EN

Stack Overflow用户
提问于 2020-10-07 06:50:17
回答 2查看 748关注 0票数 8

我想把所有的赛季和分区都列在联赛表上,就像你在data > seasons看到的那样。我已经设置好了,我相信使用@connection就可以了。

因此,问题是,我必须如何更改我的分区模式,以便将分区包含在League中。

我花了很长时间阅读了@connections@key,并理解了当使用密钥时,哈希是用我给他们的ID创建的。但是,在多次阅读connections文档之后,我还是不太理解为什么这个方法不起作用。

我很想更好地理解这一点,所以我正在尽我所能去尝试发展一种理解!

注:我认为值得一提的是,每次我更改模式和amplify mock重新构建散列键时,都会添加散列键。我想知道这是否有一些影响?当涉及到键时,我应该在每次模式更改时完全清除SQLite吗?

联盟架构

代码语言:javascript
运行
复制
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季节

代码语言:javascript
运行
复制
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"])
}

部门架构

代码语言:javascript
运行
复制
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!
}

查询

代码语言:javascript
运行
复制
  listLeagues {
    items {
      name
      division {
        items {
          name
        }
      }
      seasons {
        items {
          name
          division {
            items {
              name
            }
          }
        }
      }
    }
  }

数据

我在这里展示了该结构是正确的,因为League中包含的Seasons如预期的那样具有Divisions

代码语言:javascript
运行
复制
{
  "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是完全有效的?

EN

回答 2

Stack Overflow用户

发布于 2020-10-26 07:39:25

也许这应该是一个评论而不是一个实际的答案,但我需要描述这个模式,如果你认为合适的话,我会在稍后删除它。

Jamie,只是为了测试,你能试试下面的模式吗?它基本上与纳德提出的模式相同,只是从Division上的key中删除了字段name

代码语言:javascript
运行
复制
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!
}

我认为你得到的错误,即:

代码语言:javascript
运行
复制
"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运行查询来激发。

票数 2
EN

Stack Overflow用户

发布于 2020-10-11 21:01:44

由于您在分区上设置了两种不同类型的查询模式(一种是使用联赛ID的联赛查询模式,另一种是使用赛季ID的赛季查询模式),因此应该创建两个索引。尝试如下所示:

代码语言:javascript
运行
复制
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", "name"])
  @key(name: "byDivision", fields: ["leagueID", "seasonID", "name"]) {
  id: ID!
  name: String!
  faId: ID!
  leagueID: ID!
  seasonID: ID!
  league: League! @connection(fields: ["leagueID"])
  season: Season! @connection(fields: ["seasonID"])
  ageInput: String!
  level: Int!
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64234829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档