Prisma中能否使用createMany结合connect进行关联批量创建?
在Prisma中用createMany结合connect批量创建关联数据的方案
目前Prisma的createManyAPI不支持直接结合connect批量创建带关联的数据,官方文档里确实没有嵌套createMany+connect的相关示例。
createMany的设计初衷是高效插入单表批量数据,本身不支持嵌套的关联操作(包括connect),你现在用循环调用prisma.posts.create的方式是当前可行的方案之一,但这种方式会发起多次数据库请求,性能上存在一定损耗。
替代优化方案
1. 事务包裹循环操作(保证原子性)
用$transaction把所有创建请求包起来,确保所有操作要么全部成功,要么全部回滚,避免数据不一致:
const createPostsWithUser = async (userId, postTitles) => { return prisma.$transaction( postTitles.map(title => prisma.post.create({ data: { title, author: { connect: { id: userId } } } }) ) ) }
2. 先批量创建再批量关联(适用于关联可延迟的场景)
如果Post与User的关联允许后续更新,可分两步操作:先批量创建Post,再批量关联到指定User:
const createPostsAndConnectUser = async (userId, postTitles) => { // 第一步:批量创建无关联的posts const createdPosts = await prisma.post.createMany({ data: postTitles.map(title => ({ title })) }) // 第二步:批量更新关联用户(需确保title唯一,或用创建后的id列表过滤) await prisma.post.updateMany({ where: { title: { in: postTitles } }, data: { author: { connect: { id: userId } } } }) return createdPosts }
若需要更高效的原生批量关联操作,可以关注Prisma官方更新,未来可能会扩展createMany的关联支持,但目前只能通过上述方案实现需求。
内容的提问来源于stack exchange,提问作者fotoflo
相关产品推荐
相关产品推荐

