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

问题描述

我一直在遵循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"])
}

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

根据我的理解,将@key与'name'和多个'fields'一起使用会在表上创建一个二级索引,并通过@connection指定该键会告诉连接使用该键而不是表的主索引。例如,在“ byEmployeeIDByCompanyID”键中,employeeID是分区键,companyID是排序键。对“ employmentByEmployeeIDByCompanyID” queryField进行查询查询中有一个employeeID,但没有companyID,它返回给定雇员的所有就业机会,这就是我想要的,为什么连接不起作用?

解决方法

我在编辑解析器中发现了成功,因此现在就开始讨论。对于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"
    }
  }
}