Bird
Raised Fist0
NestJSframework~10 mins

Prisma setup in NestJS - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Prisma setup in NestJS
Install Prisma CLI
↓
Initialize Prisma
↓
Define schema.prisma
↓
Generate Prisma Client
↓
Create PrismaService in NestJS
↓
Inject PrismaService in modules
↓
Use PrismaClient for DB operations
This flow shows the steps to set up Prisma in a NestJS project, from installation to using the Prisma client in services.
Execution Sample
NestJS
npm install @prisma/client prisma
npx prisma init
// edit schema.prisma
npx prisma generate
// create prisma.service.ts
// inject PrismaService in app.module.ts
This code installs Prisma, initializes it, generates the client, and sets up the PrismaService in NestJS.
Execution Table
StepActionResultNotes
1Run npm install @prisma/client prismaPrisma packages installedPackages ready for use
2Run npx prisma initCreates prisma/ folder with schema.prismaSchema file created for DB models
3Edit schema.prismaDefine data modelsModels describe DB tables
4Run npx prisma generateGenerates Prisma ClientClient code to query DB
5Create PrismaService classService wraps PrismaClientAllows injection in NestJS
6Add PrismaService to module providersService available for injectionNestJS DI setup
7Inject PrismaService in other servicesUse PrismaClient methodsPerform DB operations
8Application runs with PrismaDB queries workSetup complete
💡 All steps done, Prisma is set up and ready in NestJS
Variable Tracker
VariableStartAfter Step 2After Step 4After Step 5Final
prismaClientundefinedundefinedGenerated PrismaClient instanceWrapped in PrismaServiceInjected and used in services
schema.prismanoneCreated empty schemaEdited with modelsUsed to generate clientDefines DB structure
Key Moments - 3 Insights
Why do we run 'npx prisma generate' after editing schema.prisma?
Because the Prisma Client code must be regenerated to reflect the updated data models in schema.prisma, as shown in execution_table step 4.
How does PrismaService help in NestJS?
PrismaService wraps the PrismaClient and allows it to be injected via NestJS's dependency injection system, making it easy to use Prisma in other services (see steps 5 and 6).
What happens if you forget to add PrismaService to module providers?
NestJS won't know how to inject PrismaService, causing errors when other services try to use it, as indicated in step 6.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, at which step is the Prisma Client generated?
AStep 4
BStep 3
CStep 5
DStep 2
💡 Hint
Check the 'Result' column for 'Generates Prisma Client' in the execution_table.
According to variable_tracker, what is the state of prismaClient after step 5?
AUndefined
BGenerated PrismaClient instance
CWrapped in PrismaService
DInjected and used in services
💡 Hint
Look at the 'prismaClient' row under 'After Step 5' in variable_tracker.
If you skip adding PrismaService to module providers, what will likely happen?
APrismaClient will still work without errors
BNestJS will throw an injection error
Cschema.prisma will not be created
DPrisma Client will not generate
💡 Hint
Refer to key_moments about forgetting to add PrismaService to providers.
Concept Snapshot
Prisma setup in NestJS:
1. Install @prisma/client and prisma packages.
2. Run 'npx prisma init' to create schema.prisma.
3. Define your data models in schema.prisma.
4. Run 'npx prisma generate' to create Prisma Client.
5. Create PrismaService wrapping PrismaClient.
6. Add PrismaService to module providers.
7. Inject PrismaService in services to query DB.
Full Transcript
To set up Prisma in NestJS, first install the Prisma packages. Then initialize Prisma to create the schema.prisma file. Edit this file to define your database models. Next, generate the Prisma Client code that will let you query the database. Create a PrismaService class that wraps the PrismaClient instance, so you can inject it using NestJS's dependency injection system. Add this service to your module's providers array. Finally, inject PrismaService into other services where you want to perform database operations. This setup allows your NestJS app to communicate with the database easily using Prisma.

Practice

(1/5)
1. What is the main purpose of PrismaService in a NestJS application?
easy
A. To provide a reusable database client instance for querying the database
B. To handle HTTP requests and responses
C. To define the database schema
D. To manage application configuration settings

Solution

  1. Step 1: Understand PrismaService role

    PrismaService wraps the Prisma Client to provide a single database connection instance across the app.
  2. Step 2: Differentiate from other roles

    It does not handle HTTP or define schema; those are handled by controllers and Prisma schema files respectively.
  3. Final Answer:

    To provide a reusable database client instance for querying the database -> Option A
  4. Quick Check:

    PrismaService = database client provider [OK]
Hint: PrismaService is your database helper in NestJS [OK]
Common Mistakes:
  • Confusing PrismaService with controllers
  • Thinking PrismaService defines schema
  • Assuming PrismaService manages config
2. Which of the following is the correct way to import and provide PrismaService in a NestJS module?
easy
A. import { PrismaService } from '@nestjs/common'; @Module({ controllers: [PrismaService] })
B. import { PrismaService } from './prisma.service'; @Module({ providers: [PrismaService], exports: [PrismaService] })
C. import PrismaService from 'prisma'; @Module({ providers: [PrismaService] })
D. import { PrismaService } from './prisma.service'; @Module({ imports: [PrismaService] })

Solution

  1. Step 1: Check import source

    PrismaService is a custom service, so it must be imported from its local file, not from '@nestjs/common' or external packages.
  2. Step 2: Verify module metadata

    It should be listed under providers and exports to be injectable and reusable in other modules.
  3. Final Answer:

    import { PrismaService } from './prisma.service'; @Module({ providers: [PrismaService], exports: [PrismaService] }) -> Option B
  4. Quick Check:

    Local import + providers and exports = correct setup [OK]
Hint: PrismaService is a provider, import locally and add to providers [OK]
Common Mistakes:
  • Importing PrismaService from wrong package
  • Adding PrismaService to controllers instead of providers
  • Using imports array instead of providers
3. Given this PrismaService method in NestJS, what will console.log(user) output if the user with ID 1 exists?
async getUserById(id: number) {
  return this.prisma.user.findUnique({ where: { id } });
}

const user = await prismaService.getUserById(1);
console.log(user);
medium
A. A syntax error because findUnique is not a function
B. An array of all users in the database
C. An object containing the user's data with ID 1
D. null, because findUnique returns nothing

Solution

  1. Step 1: Understand findUnique behavior

    findUnique returns a single record matching the unique filter or null if none found.
  2. Step 2: Given user with ID 1 exists

    The method returns the user object with ID 1, so console.log prints that object.
  3. Final Answer:

    An object containing the user's data with ID 1 -> Option C
  4. Quick Check:

    findUnique returns single object or null [OK]
Hint: findUnique returns one object or null, not array [OK]
Common Mistakes:
  • Thinking findUnique returns an array
  • Assuming it always returns null
  • Confusing findUnique with findMany
4. You wrote this PrismaService method but get a runtime error: Cannot read property 'user' of undefined. What is the likely cause?
async getAllUsers() {
  return this.prisma.user.findMany();
}
Options:
medium
A. The Prisma Client instance was not initialized in PrismaService
B. The user model is missing in the Prisma schema
C. The method should be static to access prisma
D. findMany() requires parameters and cannot be empty

Solution

  1. Step 1: Analyze error message

    'Cannot read property user of undefined' means this.prisma is undefined in the service.
  2. Step 2: Check PrismaService initialization

    Prisma Client must be instantiated and assigned to this.prisma in the constructor; missing this causes the error.
  3. Final Answer:

    The Prisma Client instance was not initialized in PrismaService -> Option A
  4. Quick Check:

    Uninitialized prisma client = undefined error [OK]
Hint: Initialize prisma client in constructor to avoid undefined errors [OK]
Common Mistakes:
  • Forgetting to instantiate PrismaClient in PrismaService
  • Assuming findMany needs parameters
  • Thinking method must be static
5. You want to create a NestJS service method that fetches all posts with their authors using Prisma. Which code snippet correctly uses Prisma to fetch posts including author data?
hard
A. return this.prisma.post.findMany({ where: { author: true } });
B. return this.prisma.post.findMany({ select: { authorId: true } });
C. return this.prisma.post.findUnique({ where: { id: 1 }, include: { author: true } });
D. return this.prisma.post.findMany({ include: { author: true } });

Solution

  1. Step 1: Understand fetching related data

    To get posts with their authors, use findMany with include: { author: true } to load related author data.
  2. Step 2: Check other options

    return this.prisma.post.findMany({ select: { authorId: true } }); only selects authorId, not author object. return this.prisma.post.findUnique({ where: { id: 1 }, include: { author: true } }); fetches one post, not all. return this.prisma.post.findMany({ where: { author: true } }); uses invalid where clause.
  3. Final Answer:

    return this.prisma.post.findMany({ include: { author: true } }); -> Option D
  4. Quick Check:

    Include loads related models in findMany [OK]
Hint: Use include to fetch related models in Prisma queries [OK]
Common Mistakes:
  • Using select instead of include for relations
  • Using findUnique when multiple records needed
  • Incorrect where clause for relations
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard