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

如何在Prisma ORM运行时获取模型名及调用其他方法

Prisma 4.9.0 Client Extensions:调用自定义方法与获取模型名

启用Client Extensions预览特性

首先需要更新schema.prisma文件,启用clientExtensions预览功能:

generator client {
  provider        = "prisma-client-js"
  previewFeatures = ["clientExtensions"]
}

核心问题解决方案

1. 客户端扩展中调用自定义方法

在客户端扩展的方法内,通过this关键字可以访问当前Prisma客户端实例,直接调用其他自定义方法:

client: {
  log: (s) => console.log(s),
  async useLog() {
    // 调用client上的log方法
    this.log("触发useLog方法");
  },
},

2. 模型扩展中获取当前模型名并调用其他方法

模型扩展的方法会绑定模型实例上下文,通过this.model可直接获取当前模型名称;同时通过this可以调用同一模型上的其他自定义方法或Prisma内置方法:

model: {
  $allModels: {
    log: (s) => console.log(s),
    async find(id, option = {}) {
      // 获取当前模型名
      const modelName = this.model;
      console.log(`当前操作模型:${modelName}`);

      // 调用同一模型的log方法
      this.log(`查询${modelName}模型,ID:${id}`);

      // 执行Prisma内置的查询逻辑
      return this.findUnique({
        where: { id },
        ...option,
      });
    },
  },
},

完整实现代码

const { PrismaClient } = require("@prisma/client");

const db = new PrismaClient().$extends({
  client: {
    log: (s) => console.log(s),
    async useLog() {
      this.log("触发client的useLog方法");
    },
  },
  model: {
    $allModels: {
      log: (s) => console.log(s),
      async find(id, option = {}) {
        const modelName = this.model;
        this.log(`查询${modelName}模型,ID:${id}`);
        
        return this.findUnique({
          where: { id },
          ...option,
        });
      },
    },
  },
});

module.exports = { db };

内容的提问来源于stack exchange,提问作者Md. Amirozzaman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:50:32