【问题标题】:Ordering Implicit Many-To-Many Relations in Prisma?在 Prisma 中订购隐式多对多关系?
【发布时间】:2022-12-04 22:02:42
【问题描述】:

我不确定这是否可能:假设我有 2 个表并且它们之间存在多对多关系。假设一个Module 可以有多个Lessons,一个课程可以出现在多个模块中。但是,我希望每个模块中的课程都按特定顺序排列。在Module 1中,Lesson A可能出现在第一课,但在Module 2中,Lesson A可能是最后一课。

我现在在 prisma 中使用隐式的多对多关系。我不想将其转换为明确的多对多,只是为了添加一个简单的排序字段。我必须这样做吗?或者有没有办法让我保持隐含的多对多,但对每个模块的课程进行排序?

我正在使用 Prisma + MySQL。

【问题讨论】:

    标签: mysql sql node.js prisma prisma2


    【解决方案1】:

    可以保持多对多关系,并且仍然对每个模块的课程进行排序。一种方法是向表示多对多关系的连接表添加一个新字段。该字段可用于存储每个模块的课程顺序。

    下面是 Prisma 中模式的示例:

    type Module {
      id: ID!
      lessons: [Lesson] @relation(name: "ModuleLessons", link: INLINE)
    }
    
    type Lesson {
      id: ID!
      modules: [Module] @relation(name: "ModuleLessons", link: INLINE)
    }
    
    type ModuleLessons @embedded {
      moduleId: ID!
      lessonId: ID!
      order: Int
    }
    

    在此模式中,ModuleLessons 类型表示在ModuleLesson 类型之间具有多对多关系的连接表。此类型中的 order 字段可用于存储每个模块的课程顺序。

    然后,您可以在查询中使用 order 字段来检索所需 order 中每个模块的课程。例如,您可以使用以下查询获取特定模块的课程,按 order 字段排序:

    query {
      module(id: "...") {
        lessons(orderBy: {order: ASC}) {
          id
          ...
        }
      }
    }
    

    我希望这有帮助。

    【讨论】:

      猜你喜欢
      • 2015-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2021-10-03
      • 2021-07-23
      • 2022-01-08
      • 2021-03-17
      • 2021-12-04
      相关资源
      最近更新 更多