Prisma Get Started: Instalasi, Skema, Migrasi, dan Query Dasar

Prisma adalah ORM modern untuk ekosistem JavaScript/TypeScript. Anda mendeskripsikan model data pada schema.prisma, melakukan migrasi skema ke database, lalu memakai Prisma Client (type-safe) untuk membaca/menulis data dari kode aplikasi. Pada bagian akhir, Anda juga akan mencoba Prisma Studio untuk menjelajah data secara visual selama pengembangan.

Catatan: Jalur tercepat memakai SQLite (tanpa setup server DB). Untuk produksi, gunakan PostgreSQL/MySQL dsb.—prinsipnya sama.

Daftar Isi

Prasyarat

  • Node.js & npm terpasang.
  • Koneksi internet untuk mengunduh dependensi.
  • Terminal/PowerShell (boleh WSL/macOS/Linux/Windows).

Inisialisasi Proyek & Prisma

Langkah berikut membuat proyek Node minimal, memasang Prisma dan Prisma Client, lalu melakukan inisialisasi.

Copy

mkdir prisma-hello
cd prisma-hello
npm init -y
npm install prisma @prisma/client
npx prisma init --datasource-provider sqlite

Perintah di atas menghasilkan folder prisma/ dan berkas .env dengan koneksi SQLite default (file:./dev.db), serta kerangka schema.prisma.

Menyusun Skema (schema.prisma)

Kita buat model sederhana: User dan Post (relasi satu->banyak). Simpan isi berikut ke prisma/schema.prisma.

File: prisma/schema.prisma
Copy
generator client {
  provider = "prisma-client-js"
}
datasource db {
  provider = "sqlite"
  url      = env("DATABASE_URL") // default: file:./dev.db
}
model User {
  id        String   @id @default(cuid())
  email     String   @unique
  name      String
  posts     Post[]
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
}
model Post {
  id        String   @id @default(cuid())
  title     String
  content   String?
  published Boolean  @default(false)
  author    User     @relation(fields: [authorId], references: [id])
  authorId  String
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  @@index([authorId], map: "idx_post_author")
}

Migrasi Skema ke Database

Jalankan migrasi untuk menyinkronkan skema ke database dan mengenerate Prisma Client.

Copy

npx prisma migrate dev --name init_schema

Perintah ini membuat folder prisma/migrations/ berisi SQL yang diterapkan ke database lokal. Setelah sukses, Prisma Client siap dipakai.

Query Dasar dengan Prisma Client

Buat berkas src/app.ts, lalu isi dengan contoh CRUD sederhana berikut:

File: src/app.ts
Copy
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
async function main() {
  // Buat user
  const alice = await prisma.user.create({
    data: { email: "alice@example.com", name: "Alice" },
  });
  // Buat beberapa post milik Alice
  await prisma.post.createMany({
    data: [
      { title: "Halo Prisma", content: "Memulai dengan Prisma.", authorId: alice.id, published: true },
      { title: "Konsep Skema", content: "Model, relasi, migrasi.", authorId: alice.id }
    ]
  });
  // Baca post terbit terbaru
  const recent = await prisma.post.findMany({
    where: { published: true },
    orderBy: { createdAt: "desc" },
    take: 10,
    include: { author: { select: { email: true, name: true } } }
  });
  console.log("Post terbit:", recent);
  // Update satu post
  const first = recent[0];
  if (first) {
    const updated = await prisma.post.update({
      where: { id: first.id },
      data: { title: first.title + " (diperbarui)" }
    });
    console.log("Diupdate:", updated.id);
  }
  // Hapus post yang belum diterbitkan
  const removed = await prisma.post.deleteMany({ where: { published: false } });
  console.log("Dihapus:", removed.count, "post draft");
}
main()
  .catch((e) => { console.error(e); process.exit(1); })
  .finally(async () => { await prisma.$disconnect(); });

Jalankan contoh di atas:

Copy

npm install -D typescript ts-node
npx ts-node src/app.ts

Mengecek Data via Prisma Studio

Selama pengembangan, Anda bisa mengecek isi tabel melalui antarmuka visual berikut.

Copy

npx prisma studio
Keamanan: Prisma Studio ditujukan untuk lingkungan lokal/pengembangan. Jangan mempublikasikannya ke internet publik.

Opsi Produksi (PostgreSQL)

Untuk produksi, ubah datasource menjadi postgresql dan sesuaikan .env. Berikut contoh singkat:

File: prisma/schema.prisma (cuplikan)
Copy
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
File: .env (contoh)
Copy
DATABASE_URL="postgresql://USER:PASS@HOST:5432/DBNAME?schema=public"

Copy

npx prisma migrate dev --name init_pg

Langkah query dan Studio sama seperti pada SQLite. Di tahap produksi, pertimbangkan connection pooling (mis. pgbouncer), indeks yang tepat, serta strategi backup/restore.

Troubleshooting Ringkas

  • Gagal konek DB — Periksa DATABASE_URL, hak akses jaringan, dan status layanan DB.
  • Migrasi gagal — Tinjau folder prisma/migrations/, pastikan skema konsisten; jalankan ulang setelah koreksi.
  • Type error saat kueri — Pastikan @prisma/client terpasang dan client telah digenerate (terjadi otomatis saat install).
  • Studio tidak muncul — Pastikan port tidak bentrok; coba parametrik --port (mis. npx prisma studio --port 5555).

Kesimpulan

Itu saja! Anda telah: inisialisasi proyek, menulis skema, menjalankan migrasi, menulis kueri CRUD, dan membuka Studio. Selanjutnya, Anda bisa menambah relasi lebih kompleks, menulis seeding, serta mengintegrasikan dengan framework favorit (Express/Next/Nest). Prisma menjaga konsistensi tipe dari skema hingga kode—kombinasi yang menyenangkan untuk tim modern.

Sumber/Referensi

.refs li{margin-left:18px}

/* Code blocks */
.codebox{margin:10px 0}
.codehead{display:flex;justify-content:space-between;align-items:center;background:var(--soft);border:1px solid #e2e8f0;border-bottom:none;border-radius:10px 10px 0 0;padding:8px 10px;font-size:14px;color:var(--ink-2)}
pre{background:var(--bg);color:var(--fg);border:1px solid var(--line);border-radius:10px;padding:12px;overflow:auto;margin:0}
code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:14px;white-space:pre}
.copy{float:right;margin-left:auto;margin-bottom:6px;padding:6px 10px;border-radius:8px;border:1px solid var(--muted);background:#f8fafc;cursor:pointer}
.copy:disabled{opacity:.6;cursor:not-allowed}


Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

Artikel Terkait

wave

Tekan ESC untuk menutup