Skip to content

多对多关系

多对多 (m-n) 关系指,其中一侧的零或多条记录可以关联另一侧的零或多条记录的关系。

关系型数据库中,多对多关系一般通过 关系表 实现。Prisma schema 中多对多关系既可以是 显式的 也可以是 隐式的。

表结构

ts
model course {
  id              Int              @id @default(autoincrement())
  name            String?          @db.VarChar(10)
  student_courses student_course[]
}
model student {
  id              Int              @id @default(autoincrement())
  name            String?          @db.VarChar(10)
  no              String?          @db.VarChar(10)
  student_courses student_course[]
}

model student_course {
  id        Int     @id @default(autoincrement())
  studentid Int
  student   student @relation(fields: [studentid], references: [id])
  courseid  Int
  course    course  @relation(fields: [courseid], references: [id])
}

查询

  • 第一种通过 student-> student_course->course 查询
ts

  async manybymany() {
    const result = await this.prismadbService.student.findMany({
      select: {
        name: true,
        student_courses: {
          select: {
            course: {
              select: {
                name: true,
              },
            },
          },
        },
      },
    });
    return result;
  }
  • 第二种通过 student_course->student 或者course 查询
ts
  async manybymany2() {
    const result = await this.prismadbService.student_course.findMany({
      select: {
        student: {
          select: {
            name: true,
          },
        },
        course: {
          select: {
            name: true,
          },
        },
      },
    });
    return result;
  }