Custom Prisma Client Location
Prisma allows you to customize the output location of your Prisma Client.
generator client {
provider = "prisma-client-js"
output = "../node_modules/@notiz/prisma"
}
For the schema above you would import PrismaClient from @notiz/prisma instead of the default @prisma/client.
-import { PrismaClient } from '@prisma/client';
+import { PrismaClient } from '@notiz/prisma';
const prisma = new PrismaClient();
This can be useful if you want to just use a different location or want to use multiple Prisma Clients in your project.
CustomPrismaModule and CustomPrismaService
To use nestjs-prisma with custom output location for Prisma Client, you need to update to nestjs-prisma@v0.20.0 or later and use CustomPrismaModule and CustomPrismaService.
Import CustomPrismaModule and provide a unique name and an instance of your PrismaClient. The unique name will be used to inject the CustomPrismaService.
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CustomPrismaModule } from 'nestjs-prisma';
import { PrismaClient } from '@notiz/prisma'; // 👈 update to your output directory
@Module({
imports: [
CustomPrismaModule.forRoot({
name: 'PrismaServiceAuth', // 👈 must be unique for each PrismaClient
client: new PrismaClient(), // create new instance of PrismaClient
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
The PrismaClient instance could also be used together with the new preview feature Prisma Client extensions.
Use the Inject decorator with the unique name to inject CustomPrismaService. Additionally, CustomPrismaService requires you to specify the PrismaClient as generic for type-safety & auto-completion.
import { Inject, Injectable } from '@nestjs/common';
import { CustomPrismaService } from 'nestjs-prisma';
import { PrismaClient } from '@notiz/prisma'; // 👈 update to your output directory
@Injectable()
export class AppService {
constructor(
@Inject('PrismaServiceAuth') // 👈 use unique name to reference
private prisma: CustomPrismaService<PrismaClient>, // specify PrismaClient for type-safety & auto-completion
) {}
users() {
return this.prisma.client.user.findMany();
}
user(userId: string) {
return this.prisma.client.user.findFirstOrThrow({
where: { id: userId },
});
}
}
You can use the auto generated queries from PrismaClient by accessing client property of CustomPrismaService e.g. this.prisma.client.user.create({ data: ... });
Multiple Prisma Clients
If you have multiple Prisma Clients repeat the above steps for each client.
Important to register each Prisma Client with a unique name and the correct PrismaClient instance.
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CustomPrismaModule } from 'nestjs-prisma';
import { PrismaClient as PrismaAuth } from '@notiz/prisma'; // 👈 update to your output directory
import { PrismaClient as PrismaCms } from '@notiz/prisma-cms'; // 👈 update to your output directory
@Module({
imports: [
CustomPrismaModule.forRoot({
name: 'PrismaServiceAuth', // 👈 must be unique for each PrismaClient
client: new PrismaAuth(),
}),
CustomPrismaModule.forRoot({
name: 'PrismaServiceCms', // 👈 must be unique for each PrismaClient
client: new PrismaCms(),
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
Import CustomPrismaService with the correct reference name and Prisma Client as type.
import { Inject, Injectable } from '@nestjs/common';
import { CustomPrismaService } from 'nestjs-prisma';
import { PrismaClient as PrismaAuth } from '@notiz/prisma'; // 👈 update to your output directory
import { PrismaClient as PrismaCms } from '@notiz/prisma-cms'; // 👈 update to your output directory
@Injectable()
export class AppService {
constructor(
@Inject('PrismaServiceAuth') // 👈 use unique name to reference
private prismaAuth: CustomPrismaService<PrismaAuth>,
@Inject('PrismaServiceCms') // 👈 use unique name to reference
private prismaCms: CustomPrismaService<PrismaCms>,
) {}
users() {
return this.prismaAuth.client.user.findMany();
}
user(userId: string) {
return this.prismaAuth.client.user.findFirstOrThrow({
where: { id: userId },
});
}
posts() {
return this.prismaCms.client.post.findMany();
}
}