【发布时间】:2021-07-18 07:59:10
【问题描述】:
我的架构如下所示:
model School {
id Int @id @default(autoincrement())
name String
teachers Teacher[]
students Student[]
}
model Teacher {
id Int @id @default(autoincrement())
firstName String
lastName String
schools School[]
students Student[]
}
model Student {
id Int @id @default(autoincrement())
firstName String
lastName String
teacherId Int
teacher Teacher @relation(fields: [teacherId], references: [id])
schoolId Int
school School @relation(fields: [schoolId], references: [id])
}
我想在一次通话中创建一所学校,有老师和学生。这是我的尝试:
prisma.school.create({
data: {
name: "Best",
teachers: {
create: {
id: 2,
firstName: "Charles",
lastName: "Wise",
students: {
create: {
firstName: "Pauline",
lastName: "Jenkins",
school: {
connect: {
id: -1 // How to reference a school that is being created?
}
}
}
}
}
}
}
});
不幸的是,我不知道在创建学生时如何传递学校的 id。
我知道我可以分两次调用,首先用老师创建一个学校,然后用刚刚创建的学校和老师创建一个学生:
const school = await prisma.school.create({
data: {
name: "Best",
teachers: {
create: {
id: 2,
firstName: "Charles",
lastName: "Wise",
}
}
},
include: {
teachers: true,
}
});
await prisma.student.create({
data: {
firstName: "Pauline",
lastName: "Jenkins",
school: {
connect: {
id: school.id
}
},
teacher: {
connect: {
id: school.teachers[0].id
}
}
}
});
但这看起来有点奇怪且容易出错。
有没有办法将其重写为单个调用?
【问题讨论】:
标签: node.js typescript postgresql prisma