Prisma ORM Snippets
Essential code snippets for Prisma ORM development. Speed up your database operations with ready-to-use templates for CRUD operations, advanced queries, schema definitions, and more.
🚀 Features
- Complete CRUD Operations - Create, Read, Update, Delete with error handling
- Advanced Queries - Pagination, filtering, sorting, and aggregation
- Relationships - One-to-many, many-to-many, and self-referencing
- Schema Definitionsy - Models, enums, indexes, and constraints
- Transactions - Database transactions and batch operations
- Raw Queries - Custom SQL when needed
- TypeScript Support - Works with both JavaScript and TypeScript
- Best Practices - Error handling, connection management, and performance patterns
📦 Installation
- Install from VS Code Extensions marketplace
- Search for "Prisma ORM Snippets"
- Install and reload VS Code
📝 Available Snippets
Setup & Client
Trigger |
Description |
pimport |
Import and initialize Prisma Client |
psingleton |
Prisma Client singleton pattern for Next.js |
pconnect |
Explicitly connect to database |
pdisconnect |
Disconnect from database |
Basic CRUD Operations
Trigger |
Description |
pfindmany |
Find many records |
pfindunique |
Find unique record by ID |
pfindfirst |
Find first record matching condition |
pcreate |
Create a new record |
pcreatemany |
Create multiple records |
pupdate |
Update a record |
pupdatemany |
Update multiple records |
pupsert |
Update or create record (upsert) |
pdelete |
Delete a record |
pdeletemany |
Delete multiple records |
Advanced Queries
Trigger |
Description |
pfindinclude |
Find records with related data |
pfindselect |
Find records with specific fields |
pfindwhere |
Find records with where conditions |
pfindpagination |
Find records with pagination and ordering |
padvancedwhere |
Advanced where conditions with AND/OR |
prelationfilter |
Filter by relation fields |
pdate |
Date range operations |
psearch |
Full text search across fields |
Aggregation & Analytics
Trigger |
Description |
pcount |
Count records |
paggregate |
Aggregate operations (sum, avg, count) |
pgroupby |
Group by operations |
Transactions & Raw Queries
Trigger |
Description |
ptransaction |
Database transaction |
praw |
Execute raw SQL query |
prawexecute |
Execute raw SQL command |
Relationships
Trigger |
Description |
pnestedcreate |
Create with nested relation |
pnestedconnect |
Create with relation connect |
Utilities
Trigger |
Description |
ptrycatch |
Prisma operation with error handling |
Schema Definitions
Trigger |
Description |
pgenerator |
Prisma client generator |
pdatasource |
Database datasource configuration |
pmodel |
Basic Prisma model |
pmodelrel |
Models with one-to-many relationship |
penum |
Prisma enum definition |
pmanytomany |
Many-to-many relationship |
pexplicitmany |
Explicit many-to-many with join table |
pfields |
Common Prisma field types |
pattributes |
Common field attributes |
pindex |
Prisma indexes and constraints |
pschema |
Complete Prisma schema template |
psoftdelete |
Model with soft delete pattern |
pselfrelation |
Self-referencing relationship |
pcomposite |
Composite type definition (MongoDB) |
🎯 Usage Examples
Basic CRUD
Type pcreate
and press Tab:
const result = await prisma.user.create({
data: {
email: "user@example.com",
name: "John Doe",
},
});
Type pfindmany
and press Tab:
const results = await prisma.user.findMany({
// Add options here
});
Advanced Queries
Type pfindpagination
and press Tab:
const result = await prisma.post.findMany({
skip: 0,
take: 10,
orderBy: {
createdAt: 'desc',
},
});
Type psearch
and press Tab:
const result = await prisma.post.findMany({
where: {
OR: [
{
title: {
contains: searchTerm,
mode: 'insensitive',
},
},
{
content: {
contains: searchTerm,
mode: 'insensitive',
},
},
],
},
});
Schema Definition
Type pmodel
and press Tab:
model User {
id String @id @default(cuid())
email String @unique
name String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("users")
}
Type pmodelrel
and press Tab:
model User {
id String @id @default(cuid())
email String @unique
name String?
posts Post[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("users")
}
model Post {
id String @id @default(cuid())
title String
content String?
authorId String
author User @relation(fields: [authorId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("posts")
}
🔧 File Types Supported
.js
- JavaScript files
.jsx
- React JavaScript files
.ts
- TypeScript files
.tsx
- React TypeScript files
.prisma
- Prisma schema files
📁 Common File Structure
project/
├── prisma/
│ ├── schema.prisma # Use schema snippets here
│ └── seed.js # Use CRUD snippets
├── lib/
│ └── prisma.js # Use psingleton here
├── pages/api/ # Use CRUD snippets
└── app/api/ # Use CRUD snippets (Next.js 13+)
🎨 Customization
All snippets include placeholder variables:
${1:variable}
- Primary placeholder (auto-selected)
${2:variable}
- Secondary placeholder
${3|option1,option2|}
- Choice placeholder
- Navigate with
Tab
and Shift+Tab
💡 Pro Tips
- Use
select
instead of include
when you only need specific fields
- Add database indexes for frequently queried fields
- Use pagination for large datasets
Best Practices
- Always handle errors with try-catch blocks
- Use transactions for related operations
- Disconnect Prisma client in serverless environments
- Use connection pooling in production
Common Patterns
// Pagination with total count
const [data, total] = await Promise.all([
prisma.post.findMany({ skip: 0, take: 10 }),
prisma.post.count()
]);
// Upsert pattern
const user = await prisma.user.upsert({
where: { email: "user@example.com" },
update: { name: "Updated Name" },
create: { email: "user@example.com", name: "New Name" }
});
- Prisma Official Extension - Syntax highlighting and IntelliSense
- Prisma Insider - Additional Prisma tools
🐛 Issues & Feedback
Found a bug or have a suggestion?
Open an issue on GitHub
📄 License
MIT License - Free to use in your projects!
Happy coding with Prisma! 🗃️