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

如何为Prisma创建基于表名的可复用查询函数?

能否为Prisma创建可复用的查询函数?

当然可以,你提供的这种通过表名字符串动态调用Prisma模型的方式是可行的,但实际使用中有几个细节需要优化:

  • 类型安全缺失问题:直接传入字符串类型的tableName会失去TypeScript的类型校验,比如传入不存在的表名时,编辑器不会给出提示,只有运行时才会报错。可以通过定义Prisma模型名称的联合类型来解决这个问题:
type PrismaModelName = keyof typeof prisma;
async function getData(tableName: PrismaModelName) {
  const data = await prisma[tableName].findMany({});
  return data;
}

这样只有传入Prisma生成的合法模型名称时,才能通过类型检查。

  • 连接管理不当:示例中每次调用getData都执行prisma.$disconnect()并不推荐。Prisma Client本身会维护连接池,频繁断开重连会降低性能,通常只需要在应用关闭(shutdown)时调用一次$disconnect()即可。

  • 提升扩展性:可以给函数增加可选参数,支持传递findMany的查询配置,让函数的复用性更强:

type PrismaModelName = keyof typeof prisma;
type FindManyArgs<T> = Parameters<T['findMany']>[0];

async function getData<T extends PrismaModelName>(
  tableName: T,
  args?: FindManyArgs<typeof prisma[T]>
) {
  const data = await prisma[tableName].findMany(args || {});
  return data;
}

调用时就可以灵活传入筛选、排序等参数,比如:getData('User', { where: { age: { gt: 18 } }, orderBy: { createdAt: 'desc' } })。

内容的提问来源于stack exchange,提问作者Saqo Melqon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:03:21