Prisma关联报错:Argument `user`缺失问题求助
解决Prisma创建Login记录时"Argument
user is missing"报错 问题场景
你定义了User和Login的关联模型:
model Login { id String @id @default(uuid()) user User @relation(fields: [userId], references: [id]) userId String @db.VarChar(255) } model User { id String @id @default(uuid()) email String @unique @db.VarChar(255) logins Login[] }
尝试通过userId创建Login记录时触发报错:
const getUser = await prisma.user.findUnique({ where: { email: email } }) if(getUser){ try { await prisma.login.create({data:{ userId: getUser.id, }}) } catch (e) { if (e instanceof Prisma.PrismaClientKnownRequestError) { console.log("PRISMA ERROR", e.code) } throw e } }
报错信息:
Argument
useris missing.
解决方案
方案1:给关联关系添加明确名称并重新生成客户端
修改Prisma模型,给@relation添加统一名称,让Prisma正确识别外键与关联字段的映射:
model Login { id String @id @default(uuid()) user User @relation(name: "UserLogins", fields: [userId], references: [id]) userId String @db.VarChar(255) } model User { id String @id @default(uuid()) email String @unique @db.VarChar(255) logins Login[] @relation(name: "UserLogins") }
执行命令重新生成Prisma客户端:
npx prisma generate
之后再运行原创建代码即可正常执行。
方案2:使用关联connect语法创建记录
直接通过connect关联已存在的User,替代直接赋值userId:
if(getUser){ try { await prisma.login.create({data:{ user: { connect: { id: getUser.id } } }}) } catch (e) { if (e instanceof Prisma.PrismaClientKnownRequestError) { console.log("PRISMA ERROR", e.code) } throw e } }
原因说明
这个报错是因为Prisma在处理显式声明的关联时,类型系统可能未正确识别userId作为外键字段的直接赋值权限,反而要求通过关联对象user来创建记录。添加统一的关系名称可以让Prisma明确映射规则,而使用connect语法则符合Prisma关联数据创建的标准规范。
内容的提问来源于stack exchange,提问作者Ethical Hacking
相关产品推荐
相关产品推荐

