You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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
  }
})

关键说明:

  1. 嵌套创建逻辑:通过tutorAvailability.create传入一个数组,Prisma会在创建导师的同时,批量创建所有对应的日程条目,并自动设置每条日程的tutorName外键,关联到刚创建的导师。
  2. 过滤空条目:用filter(item => item != null)过滤掉无效的日程数据,和你原来的循环判断逻辑一致。
  3. 双向关联自动生效:创建完成后,数据库中Tutor的tutorAvailability会关联所有新创建的日程,每条DailyAvailibility的tutor字段也会关联到对应的导师,双向关联无需额外操作。
  4. 原子操作:整个过程是一个数据库事务,要么全部成功,要么全部失败,避免了分开创建时可能出现的部分数据写入失败的问题。

如果之后需要给已有导师添加日程,可以用Prisma的tutor.update方法,同样通过tutorAvailability.create来添加:

await prisma.tutor.update({
  where: { tutorName: existingTutorName },
  data: {
    tutorAvailability: {
      create: [/* 新的日程条目数组 */]
    }
  }
})

内容的提问来源于stack exchange,提问作者David Shackelford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 18:22:35