【发布时间】:2022-01-13 20:53:25
【问题描述】:
我的问题是我需要在两个模式模型之间建立连接,其中每个模型都链接到另一个数组。这里的场景是我有多个Location,每个Location 有多个Staff。每个Staff 还可以有多个Location,它们被授权在。
我在文档中没有看到这样做的方法。最初我有每个Location 和多个Staff,但这将每个Staff 限制为1 个Location。我正在玩弄altLocationNames 作为每个Staff 的字符串数组的想法,但是如果需要altLocationNames,这将需要我对所有Staff 或所有Locations 执行额外的查询。
有没有人知道一个聪明的方法来做到这一点,或者甚至只是让我在Location 获得所有Staff 以及为特定Staff 获得所有Locations 的最佳方法?
架构:
type Staff
@model
@auth(rules: [{ allow: private, provider: iam }, { allow: private, provider: userPools }])
@key(fields: ["email"])
@key(name: "byId", fields: ["id"], queryField: "listStaffsById")
@key(name: "byLocation", fields: ["locationName", "recordedAt"], queryField: "listStaffsByLocation")
@key(name: "byRole", fields: ["role", "recordedAt"], queryField: "listStaffsByRole")
@key(name: "byStatus", fields: ["status", "recordedAt"], queryField: "listStaffsByStatus") {
email: AWSEmail!
altEmails: [AWSEmail]
id: ID!
locationName: String!
location: Location @connection(fields: ["locationName"])
altLocationNames: [String]
firstName: String
lastName: String
role: StaffRole
status: StaffStatus
recordedAt: AWSDateTime!
createdAt: AWSDateTime!
updatedAt: AWSDateTime!
}
type Location
@model
@auth(rules: [{ allow: private, provider: iam }, { allow: private, provider: userPools }])
@key(fields: ["name"]) {
name: String!
subdomain: String
address: String
phone: String
email: AWSEmail
staff: [Staff] @connection(keyName: "byLocation", fields: ["name"])
createdAt: AWSDateTime!
updatedAt: AWSDateTime!
}
【问题讨论】:
-
听起来您的问题与 Amplify 指令有关,而不是与底层 AppSync 相关。我在问题中添加了 [aws-amplify] 标签。
-
我不相信这是 Amplify 特定的,实际上比 AWS 更多的 GraphQL,但我只使用 GQL 和 AppSync,所以我不确定这里是否存在语法差异。
-
@connection、@model、@key和@auth是 Amplify-only directives。 Amplify 使用它们来构建您的 DynamoDB 表和 AppSync GraphQL 架构/解析器。 AppSync 中不存在这些指令,您可以在其中编写自己的解析器。 -
啊,我明白了,谢谢你的澄清。一旦我的待办事项列表变短,我需要回去学习 graphql 基础知识。
标签: amazon-web-services graphql aws-amplify aws-appsync