node.js - 如何连接多条mn关系记录
问题描述
我有一个看起来像这样的架构:
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
}
}
}
});
但这看起来有点奇怪且容易出错。
有没有办法将其重写为单个调用?
解决方案
如果记录存在,您可以尝试使用此代码段进行连接,或者在记录不存在时随时创建。
prisma.teachers.create({
data: {
id: 2,
firstName: 'Charles',
lastName: 'Wise',
students: {
create: {
firstName: 'Pauline',
lastName: 'Jenkins',
},
},
school: {
connectOrCreate: {
where: {
name: 'best',
},
create: {
name: 'best',
},
},
},
},
});
推荐阅读
- angular7 - 从循环角度表格列中读取值
- arrays - 不能在 Swift 中将类型字符串的值转换为 [string]
- sorting - 如何使用open mp在N个处理器之间划分n个数字
- python-3.x - 重塑数据帧时间序列
- reactjs - 如何删除 react-draft-wysiwyg 工具栏中的默认选项?
- python - 所有特征值都是正的,仍然 np.linalg.cholesky 给出矩阵不是正定的错误
- swift - 如何在 SwiftUI 的三元运算符中“什么都不做”?
- icalendar - 将电话号码添加到 ical
- javascript - 所有 Ipad 设备相同的布局
- python - R Tensorflow错误消息:py_get_attr_impl(x,name,silent)中的错误:AttributeError:模块'tensorflow'没有属性