Prisma使用updateMany操作关联notifications字段提示未知参数问题
报错原因
- Prisma 的
updateMany接口目前仅支持更新当前模型的标量字段,不支持任何关联模型的嵌套写操作(包括嵌套创建、更新、删除关联记录)。你看到的报错信息里列出的UserUpdateManyMutationInput仅包含User模型的4个原生标量字段,也验证了这一点,关联字段notifications根本不在updateMany的允许入参范围内。 - 而单条记录的
update接口是支持嵌套关联操作的,所以你后续循环调用单条update的写法可以正常运行,但这种写法会产生N次数据库请求(N为粉丝数量),性能损耗极大。
最优批量实现方案
直接使用 Prisma 提供的createMany接口批量创建通知记录,仅需2次数据库请求即可完成操作,性能远高于循环单条更新的方案,代码实现如下:
createNotification: async (_, args, {req, res}) => { // 1. 仅查询所有关注当前用户的粉丝ID,减少数据传输开销 const followers = await prisma.user.findMany({ where: { following: { some: { id: req.userId } } }, select: { id: true } }) // 2. 批量为所有粉丝插入通知记录 await prisma.notification.createMany({ data: followers.map(follower => ({ userId: follower.id, message: args.message, watched: false })) }) }
如果你需要获取创建完成的通知记录,可使用 Prisma 4.6.0 版本新增的createManyAndReturn接口替换上述的createMany即可。
内容的提问来源于stack exchange,提问作者Peter Boomsma
相关产品推荐
相关产品推荐

