You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,
    
};

错误原因

  1. 参数冲突:创建etl_users_project记录时,同时传入了project_code字段值和etl_projects.connect关联操作。Prisma规定关联字段创建时只能二选一:要么直接传外键值,要么用connect关联现有记录,同时使用会被判定为未知参数。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:19:51