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

如何在运行时获取Prisma中任意表的主键名称?

在Prisma中运行时获取表的主键名称

你可以通过Prisma Client暴露的内部_baseDmmf对象识别主键——每个模型字段的isId属性会标记该字段是否为主键(包括复合主键)。以下是具体实现方法:

实现代码

function getPrimaryKey(prisma, targetTable) {
  // 匹配目标表对应的模型:兼容@@map指定表名的情况
  const targetModel = prisma._baseDmmf.datamodel.models.find(
    model => model.db.name === targetTable || model.name === targetTable
  );

  if (!targetModel) {
    throw new Error(`未找到对应表 ${targetTable} 的模型定义`);
  }

  // 筛选出所有主键字段
  const primaryKeyFields = targetModel.fields.filter(field => field.isId);

  if (primaryKeyFields.length === 0) {
    throw new Error(`模型 ${targetModel.name} 未定义主键`);
  }

  // 单主键返回字段名,复合主键返回字段名数组
  return primaryKeyFields.length === 1 
    ? primaryKeyFields[0].name 
    : primaryKeyFields.map(field => field.name);
}

使用说明

  1. 表与模型匹配:如果你的Prisma Schema中用@@map("table_name")为模型指定了数据库表名,函数会通过model.db.name匹配;如果没有自定义表名,直接用模型名(如User)作为targetTable参数即可。
  2. 复合主键支持:如果模型定义了复合主键(如@@id([userId, postId])),函数会返回包含所有主键字段名的数组。
  3. 版本兼容性:_baseDmmf是Prisma的内部API,未被官方正式文档收录,目前主流Prisma版本均支持,但后续版本可能存在变动风险。

内容的提问来源于stack exchange,提问作者Brian Mac

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:15:42