我有一个看起来像这样的架构:
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
}
}
}
});
但这看起来有点奇怪而且容易出错。
有没有办法将其重写为单个调用?
答案 0 :(得分:0)
您可以尝试使用此代码片段在记录存在时连接或在记录不存在时随时创建。
prisma.teachers.create({
data: {
id: 2,
firstName: 'Charles',
lastName: 'Wise',
students: {
create: {
firstName: 'Pauline',
lastName: 'Jenkins',
},
},
school: {
connectOrCreate: {
where: {
name: 'best',
},
create: {
name: 'best',
},
},
},
},
});