Prisma创建etl_users_project时project_code参数未知问题解决
问题排查:Prisma创建etl_users_project记录时的参数错误
错误信息
Invalid `prisma.etl_users_project.create()` invocation: { data: { user_name: "Arun", project_code: "BIS", ~~~~~~~~~~~~ etl_projects: { connect: { project_code: "BIS" } }, etl_user_master: { connect: { id: 10 } }, ? crt_dtm?: DateTime | Null, ? crt_user_id?: String | Null, ? updt_dtm?: DateTime | Null, ? updt_user_id?: String | Null } } Unknown argument `project_code`. Available options are marked with ?. at Dn (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:114:8082) at Mn.handleRequestError (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:121:7396) at Mn.handleAndLogRequestError (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:121:7061) at Mn.request (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:121:6745) at async l (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:130:9633) at async saveUserProject (file:///C:/Users/mendrev/Downloads/BISWebAppZip/BISWeb/Backend/controllers/etl_UserProjectNew.js:32:32) { clientVersion: '5.21.1' }
已尝试操作
- 验证Prisma Schema中project_code定义正确
- 检查Schema中的关联关系
- 确保Prisma Client为最新版本
Prisma Schema片段
model etl_user_master { id Int @id @default(autoincrement()) network_id String @db.VarChar(50) name String @db.VarChar(100) email String @unique @db.VarChar(100) enabled Boolean? @default(true) etl_users_project etl_users_project? } model etl_projects { project_code String @id @db.VarChar(100) project_name String @db.VarChar(100) owner String? @db.VarChar(100) owner_email String? @db.VarChar(100) secondaryOwner String? @db.VarChar(100) secondary_owner_email String? @db.VarChar(100) start_date DateTime? @db.Date enable Boolean? crt_dtm DateTime? @db.Timestamp(6) crt_user_id String? @db.VarChar(20) updt_dtm DateTime? @db.Timestamp(6) updt_user_id String? @db.VarChar(20) etl_users_project etl_users_project[] } model etl_users_project { uid Int @id @default(autoincrement()) user_name String @db.VarChar(100) project_code String @db.VarChar(100) crt_dtm DateTime? @db.Timestamp(6) crt_user_id String? @db.VarChar(20) updt_dtm DateTime? @db.Timestamp(6) updt_user_id String? @db.VarChar(20) etl_projects etl_projects @relation(fields: [project_code], references: [project_code], onDelete: NoAction, onUpdate: NoAction, map: "fk_project_code") etl_user_master etl_user_master @relation(fields: [uid], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fk_user_id") }
后端代码片段
import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); // Save User and Project Code const saveUserProject = async (req, res) => { const { user_name, project_code } = req.body; try { if (!user_name || !project_code) { return res.status(400).json({ msg: 'User name and project code are required' }); } // Find the user by name const user = await prisma.etl_user_master.findFirst({ where: { name: user_name } }); if (!user) { return res.status(404).json({ msg: 'User not found' }); } // Ensure the project exists const project = await prisma.etl_projects.findUnique({ where: { project_code: project_code } }); if (!project) { return res.status(404).json({ msg: 'Project not found' }); } // Create the user project const newUserProject = await prisma.etl_users_project.create({ data: { user_name: user_name, project_code: project_code, etl_projects: { connect: { project_code: project_code } }, etl_user_master: { connect: { id: user.id } } } }); res.json({ status: 'success', data: newUserProject }); } catch (error) { console.error(error); res.status(500).json({ msg: 'Internal Server Error' }); } }; export { saveUserProject, };
错误原因
- 参数冲突:创建
etl_users_project记录时,同时传入了project_code字段值和etl_projects.connect关联操作。Prisma规定关联字段创建时只能二选一:要么直接传外键值,要么用connect关联现有记录,同时使用会被判定为未知参数。 - Schema关联逻辑错误:
etl_users_project模型中,etl_user_master关联的fields设置为自身主键uid,这会将当前表主键作为外键关联用户表ID,不符合业务逻辑,后续会引发关联失败问题。
解决方法
1. 修正创建代码的参数冲突
移除create方法中直接传入的project_code字段,保留etl_projects.connect即可,Prisma会自动通过关联填充外键值:
// 修改后的创建代码 const newUserProject = await prisma.etl_users_project.create({ data: { user_name: user_name, etl_projects: { connect: { project_code: project_code } }, etl_user_master: { connect: { id: user.id } } } });
2. 修复Prisma Schema的关联错误
修改etl_users_project模型,新增user_id字段作为关联用户表的外键,替换错误的uid关联:
model etl_users_project { uid Int @id @default(autoincrement()) user_name String @db.VarChar(100) project_code String @db.VarChar(100) user_id Int // 新增用户外键字段 crt_dtm DateTime? @db.Timestamp(6) crt_user_id String? @db.VarChar(20) updt_dtm DateTime? @db.Timestamp(6) updt_user_id String? @db.VarChar(20) etl_projects etl_projects @relation(fields: [project_code], references: [project_code], onDelete: NoAction, onUpdate: NoAction, map: "fk_project_code") etl_user_master etl_user_master @relation(fields: [user_id], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fk_user_id") // 修改关联字段为user_id }
3. 重新生成Prisma Client
执行以下命令更新Prisma Client,确保Schema变更生效:
npx prisma generate
内容的提问来源于stack exchange,提问作者Vaishnavi Mendre
相关产品推荐
相关产品推荐

