如何用Prisma一次性创建导师并关联可变数量的日程记录?
一次性创建导师及关联日程并实现双向关联
你的Schema已经正确定义了导师(Tutor)和日程(DailyAvailibility)的双向关联关系:
- Tutor模型中的
tutorAvailability字段是DailyAvailibility的数组,代表一个导师对应多条日程 - DailyAvailibility模型中的
tutor字段通过tutorName外键关联到Tutor的tutorName字段,代表每条日程属于一个导师
要一次性完成导师创建+关联日程写入,并且自动建立双向关联,不需要分开调用两个创建方法,直接用Prisma的嵌套创建功能即可。
修改后的createTutor代码如下:
const createTutor = await prisma.tutor.create({ data: { tutorName: tutorName, tutorPhone: +tutorPhone, tutorRate: +tutorRate, tutorEmail: tutorEmail, // 嵌套创建关联的日程条目 tutorAvailability: { create: availability.filter(item => item != null).map(item => ({ dayOfWeek: item.dayOfWeek, beginningAvailability: +item.beginningAvailability, endingAvailability: +item.endingAvailability })) } }, // 可选:如果需要返回创建后的导师及关联的日程,加上include include: { tutorAvailability: true } })
关键说明:
- 嵌套创建逻辑:通过
tutorAvailability.create传入一个数组,Prisma会在创建导师的同时,批量创建所有对应的日程条目,并自动设置每条日程的tutorName外键,关联到刚创建的导师。 - 过滤空条目:用
filter(item => item != null)过滤掉无效的日程数据,和你原来的循环判断逻辑一致。 - 双向关联自动生效:创建完成后,数据库中Tutor的
tutorAvailability会关联所有新创建的日程,每条DailyAvailibility的tutor字段也会关联到对应的导师,双向关联无需额外操作。 - 原子操作:整个过程是一个数据库事务,要么全部成功,要么全部失败,避免了分开创建时可能出现的部分数据写入失败的问题。
如果之后需要给已有导师添加日程,可以用Prisma的tutor.update方法,同样通过tutorAvailability.create来添加:
await prisma.tutor.update({ where: { tutorName: existingTutorName }, data: { tutorAvailability: { create: [/* 新的日程条目数组 */] } } })
内容的提问来源于stack exchange,提问作者David Shackelford
相关产品推荐
相关产品推荐

