如何使用 schema.graphql 在放大数据存储中创建多对多关系

Posted

技术标签:

【中文标题】如何使用 schema.graphql 在放大数据存储中创建多对多关系【英文标题】:How to create a many to many relationship in amplify datastore using schema.graphql 【发布时间】:2022-01-22 19:59:16 【问题描述】:
type StudentCourses
  @model(queries: null)
  @auth(rules: [ allow: public ])
  @key(name: "byStudent", fields: ["studentID", "courseID"])
  @key(name: "byCourse", fields: ["courseID", "studentID"]) 
  id: ID!
  studentID: ID!
  courseID: ID!
  student: Student! @connection(fields: ["studentID"])
  course: Course! @connection(fields: ["courseID"])


type Course
  @model
  @auth(rules: [ allow: public ])
  @key(name: "bySchool", fields: ["schoolID"]) 
  id: ID!
  courseName: String!
  schoolID: ID!
  students: [Student!] @connection(keyName: "byCourse", fields: ["id"])


type Student
  @model
  @auth(rules: [ allow: public ])
  @key(name: "bySchool", fields: ["schoolID"]) 
  id: ID!
  studentName: String
  studentEmail: String
  sisID: Int
  schoolID: ID!
  courses: [Course!] @connection(keyName: "byStudent", fields: ["id"])

我按照docs 中的步骤在学生和课程之间创建了多对多关系,但我不断收到此错误Key byCourse 不存在模型学生 即使我认为我创建了一个模型连接学校和课程。提前致谢

【问题讨论】:

【参考方案1】:

你需要从Course 中省略keyName,因为在Student 模型中,你有课程列表,所以你不能真的有@key 指令。

https://docs.amplify.aws/cli-legacy/graphql-transformer/connection/#many-to-many-connections

type Course
  @model
  @auth(rules: [ allow: public ])
  @key(name: "bySchool", fields: ["schoolID"]) 
  id: ID!
  courseName: String!
  schoolID: ID!
  students: [Student!] @connection(fields: ["id"])


【讨论】:

我们如何对新的 Transformer v2 做同样的事情?我已将其全部设置为:

以上是关于如何使用 schema.graphql 在放大数据存储中创建多对多关系的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apollo Server 时如何生成 schema.graphql 文件?

如何在不使用公用文件夹和 php artisan 的情况下在 laravel graphql-playground 中加载 schema.graphql

如何使用 apollo 客户端从 schema.graphql 中提取 typescript 接口:codegen

如何在部署前从@aws-cdk/aws-appsync 检索 schema.graphql 文件

如何在我的 schema.graphql 文件中为按 id 过滤的查询引用生成的 Prisma 模式

schema.graphql 与 buildSchema()