【问题标题】: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 类型表示在Module 和Lesson 类型之间具有多对多关系的连接表。此类型中的 order 字段可用于存储每个模块的课程顺序。
然后,您可以在查询中使用 order 字段来检索所需 order 中每个模块的课程。例如,您可以使用以下查询获取特定模块的课程,按 order 字段排序:
query {
module(id: "...") {
lessons(orderBy: {order: ASC}) {
id
...
}
}
}
我希望这有帮助。