如何在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
相关产品推荐
相关产品推荐

