Prisma ORM创建记录时报Unknown argument error是什么原因
Prisma 无法直接传入外键字段创建Profile数据的原因及解决方法
核心原因
你遇到的报错是Prisma的输入类型生成规则导致的:
- 低于3.0版本的Prisma,标量外键(也就是你定义的
userId、photoId这类关联底层存储字段)的直接操作属于预览特性,默认不开启,生成的ProfileCreateInput类型不会暴露这些外键字段,仅暴露user、photo这类关系操作字段,因此直接传入userId会被识别为非法参数。 - Prisma默认情况下要求关联关系的绑定通过关系字段的嵌套操作(如
connect、create)实现,未开启标量外键操作权限时不允许直接赋值外键字段。
两种解决方案
方案1(推荐,全版本兼容)
沿用你第一段可正常运行的代码写法,通过关系字段的connect操作绑定已存在的User记录,不需要调整任何版本或配置:
const profile = await prisma.profile.create({ data: { name: "TestProfile", user: { connect: { id: user.id } }, photo: { create: { url: "http://example.com/img" } }, }, });
方案2(需要开启标量外键操作能力)
如果你确实需要直接传入外键值操作:
- 若使用Prisma 3.0及以上版本:直接重新执行
prisma generate即可,3.0+版本已默认开启标量外键操作能力,生成的输入类型会自动包含userId等外键字段,你的第二段代码即可正常运行。 - 若使用2.17.0 ~ 2.30.x版本:在
schema.prisma的generator client配置块中添加预览特性开启配置,再重新执行prisma generate即可:
generator client { provider = "prisma-client-js" previewFeatures = ["scalarForeignKeys"] }
内容的提问来源于stack exchange,提问作者ack_inc
相关产品推荐
相关产品推荐

