AWS Amplify GraphQL - 一对多连接在查询时返回空列表

Posted

技术标签:

【中文标题】AWS Amplify GraphQL - 一对多连接在查询时返回空列表【英文标题】:AWS Amplify GraphQL - One to Many connections return empty list when queried 【发布时间】:2021-02-21 21:14:00 【问题描述】:

我一直在按照 AWS GraphQL CLI 指南为我的应用设置 API,但在连接方面遇到了问题。

以下是我当前的 Graphql 架构,删除了一些属性

type Employee @model 
  id: ID!
  employment: [Employment!] @connection(name: "byEmployeeIDByCompanyID", fields: ["id"])


type Company @model 
  id: ID!
  employees: [Employment!] @connection(name: "byCompanyIDByDateHired", fields: ["id"])


type Employment @model
  @key(name: "byEmployeeIDByCompanyID", fields: ["employeeID", "companyID"], queryField: "employmentByEmployeeIDByCompanyID") 
  id: ID!
  companyID: ID!
  employeeID: ID!
  company: Company! @connection(fields: ["companyID"])
  employee: Employee! @connection(fields: ["employeeID"])

当我查询员工或公司时,[Employment] 总是返回一个空数组。我需要编辑这些字段的解析器吗?他们应该开箱即用,不是吗?

据我了解,使用带有“名称”和多个“字段”的 @key 会在表上创建一个二级索引,并使用 @connection 指定该键告诉连接使用该键而不是表主索引。例如,在“byEmployeeIDByCompanyID”键中,employeeID 是分区键,companyID 是排序键。 “employmentByEmployeeIDByCompanyID”查询字段有一个employeeID,但没有companyID,它会返回给定员工的所有工作,这正是我想要的,那么为什么连接不起作用?

【问题讨论】:

如果我编辑 Employee.employment 或 Company.employees 的解析器,我可以让它使用硬编码的employeeID/companyID 对Employee 表执行一个简单的查询。我正在尝试使用 $ctx 访问查询中的employeeID/companyID,但我还不能。 【参考方案1】:

我发现在编辑解析器方面取得了成功,所以我现在将继续这样做。对于 Employee.employment,我添加了:

"index": "byEmployeeIDByCompanyID",

到请求映射模板,并将查询从:


  "expression": "#partitionKey = :partitionKey",
  "expressionNames": 
      "#partitionKey": "id"
  ,
  "expressionValues": 
      ":partitionKey": 
          "S": "$context.source.id"
    
  


  "expression": "#partitionKey = :partitionKey",
  "expressionNames": 
      "#partitionKey": "employeeID"
  ,
  "expressionValues": 
      ":partitionKey": 
          "S": "$context.source.id"
    
  

【讨论】:

以上是关于AWS Amplify GraphQL - 一对多连接在查询时返回空列表的主要内容,如果未能解决你的问题,请参考以下文章

使用 AWS Amplify/AppSync 的嵌套 GraphQL 突变

AWS Amplify 未生成正确的 graphql 输入深度

如何在 aws amplify 中使用 graphQL 限制

@connection 上的 AWS Amplify Graphql 查询

通过 GraphQL 键检索 AWS Amplify DataStore 记录

aws amplify graphql 计算域内联解析器