多对多关系
多对多 (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;
}