กลับไปหน้าหลัก

บทที่ 1: เริ่มต้นกับ Prisma ORM

ทำความรู้จักกับ Prisma และการติดตั้งร่วมกับ Next.js อย่างถูกต้อง! 🗄️
30 นาที
เริ่มต้น
Hands-on
💡 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

Auto-generated types
Compile-time error checking
IntelliSense support
📊
Declarative Data Modeling

ออกแบบ database schema ด้วย Prisma Schema Language ที่อ่านง่ายและจัดการได้ง่าย

Schema-first approach
Relations modeling
Database migration
Query Builder & Raw SQL

ใช้ Prisma Client สำหรับ queries ทั่วไป หรือใช้ Raw SQL สำหรับ queries ที่ซับซ้อน

Fluent API
Type-safe queries
Raw SQL support

⚙️ ขั้นตอนการติดตั้ง

ติดตั้ง 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 generateGenerate Prisma Clientสร้าง Prisma Client จาก schema ใหม่หลังจากแก้ไข schema.prisma
npx prisma db pushPush Schema Changesอัพเดตฐานข้อมูลให้ตรงกับ schema (สำหรับ development)
npx prisma studioOpen Prisma Studioเปิด GUI สำหรับดูและแก้ไขข้อมูลในฐานข้อมูล
npx prisma db resetReset Databaseลบข้อมูลทั้งหมดและสร้างฐานข้อมูลใหม่ตาม schema