บทที่ 1: เริ่มต้นกับ Prisma ORM
ทำความรู้จักกับ Prisma และการติดตั้งร่วมกับ Next.js อย่างถูกต้อง! 🗄️
💡 Prisma คืออะไร?
• 🗄️ Next-generation ORM: Object-Relational Mapping ที่ออกแบบมาสำหรับ TypeScript
• 🔒 Type-safe: สร้าง TypeScript types อัตโนมัติจาก database schema
• 🚀 Developer Experience: Auto-completion, error checking และ database GUI
• ⚡ Performance: Query optimization และ connection pooling ในตัว
🎨 ทำไมต้องใช้ Prisma ORM?
Type-Safe Database Access
Prisma สร้าง TypeScript types อัตโนมัติจาก schema ทำให้การเขียนโค้ดปลอดภัยและมี auto-completion
Declarative Data Modeling
ออกแบบ database schema ด้วย Prisma Schema Language ที่อ่านง่ายและจัดการได้ง่าย
Query Builder & Raw SQL
ใช้ Prisma Client สำหรับ queries ทั่วไป หรือใช้ Raw SQL สำหรับ queries ที่ซับซ้อน
⚙️ ขั้นตอนการติดตั้ง
ติดตั้ง Prisma CLI และ Client
ติดตั้ง Prisma ORM และ Prisma Client สำหรับ Next.js application
npm install prisma @prisma/client
เริ่มต้น Prisma Project
ติดตั้ง Database Driver
กำหนดค่าฐานข้อมูลใน .env
ขั้นตอนสุดท้าย🔗 การเชื่อมต่อฐานข้อมูล
ตัวอย่างการตั้งค่า Database URL ในไฟล์ .env
PostgreSQL
ฐานข้อมูลที่แนะนำสำหรับ production
DATABASE_URL="postgresql://username:password@localhost:5432/mydb?schema=public"
MySQL
ฐานข้อมูลยอดนิยมสำหรับ web applications
DATABASE_URL="mysql://username:password@localhost:3306/mydb"
SQLite
ฐานข้อมูลไฟล์เดียว เหมาะสำหรับ development
DATABASE_URL="file:./dev.db"
MongoDB
NoSQL database สำหรับข้อมูลแบบ document
DATABASE_URL="mongodb://username:password@localhost:27017/mydb"
💻 ตัวอย่างโค้ดและการตั้งค่า
Prisma Schema (prisma/schema.prisma)
ไฟล์หลักที่กำหนดโครงสร้างฐานข้อมูลและ Prisma Client configuration
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql" // หรือ "mysql", "sqlite", "mongodb"
url = env("DATABASE_URL")
}
// ตัวอย่าง model แรก
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("users")
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
authorId Int
author User @relation(fields: [authorId], references: [id])
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@map("posts")
}⚡ คำสั่งที่ใช้บ่อย
| คำสั่ง | ความหมาย | เมื่อใช้ |
|---|---|---|
| npx prisma generate | Generate Prisma Client | สร้าง Prisma Client จาก schema ใหม่หลังจากแก้ไข schema.prisma |
| npx prisma db push | Push Schema Changes | อัพเดตฐานข้อมูลให้ตรงกับ schema (สำหรับ development) |
| npx prisma studio | Open Prisma Studio | เปิด GUI สำหรับดูและแก้ไขข้อมูลในฐานข้อมูล |
| npx prisma db reset | Reset Database | ลบข้อมูลทั้งหมดและสร้างฐานข้อมูลใหม่ตาม schema |