DATABASE-ORM DOCS

SCHEMA-DATASOURCE

datasource db
Description: Mendefinisikan sumber database yang digunakan.
Example:
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
Output: Koneksi postgresql
provider (postgresql)
Description: Provider untuk PostgreSQL.
Example:
provider = "postgresql"
Output: PostgreSQL
provider (mysql)
Description: Provider untuk MySQL.
Example:
provider = "mysql"
Output: MySQL
provider (sqlite)
Description: Provider untuk SQLite.
Example:
provider = "sqlite"
Output: SQLite
provider (sqlserver)
Description: Provider untuk SQL Server.
Example:
provider = "sqlserver"
Output: SQL Server
provider (cockroachdb)
Description: Provider untuk CockroachDB.
Example:
provider = "cockroachdb"
Output: CockroachDB
provider (mongodb)
Description: Provider untuk MongoDB (preview).
Example:
provider = "mongodb"
Output: MongoDB
url (env)
Description: Mengambil URL koneksi dari environment variable.
Example:
url = env("DATABASE_URL")
Output: process.env.DATABASE_URL
directUrl
Description: URL koneksi langsung (untuk migrasi).
Example:
directUrl = env("DIRECT_URL")
Output: Koneksi langsung
shadowDatabaseUrl
Description: URL database bayangan untuk migrasi (cloud).
Example:
shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
Output: Database bayangan

SCHEMA-GENERATOR

generator client
Description: Menghasilkan Prisma Client untuk digunakan di kode.
Example:
generator client {
  provider = "prisma-client-js"
}
Output: Client JS
provider = "prisma-client-js"
Description: Provider default untuk JavaScript/TypeScript.
Example:
provider = "prisma-client-js"
Output: JavaScript Client
output
Description: Direktori output untuk client yang dihasilkan.
Example:
generator client {
  provider = "prisma-client-js"
  output   = "./generated/prisma"
}
Output: Folder khusus client
binaryTargets
Description: Menentukan binary target (misal native, debian).
Example:
binaryTargets = ["native"]
Output: Binary spesifik
previewFeatures
Description: Mengaktifkan fitur pratinjau.
Example:
previewFeatures = ["fullTextSearch"]
Output: Fitur eksperimental

SCHEMA-MODEL

model
Description: Mendefinisikan sebuah model (tabel).
Example:
model User {
  id    Int    @id @default(autoincrement())
  name  String
  email String @unique
}
Output: Tabel User
field type (Int, String, Boolean, DateTime, Float, BigInt, Json, Bytes)
Description: Tipe data untuk field.
Example:
age Int
bio  String?
data Json
Output: Tipe data
? (optional)
Description: Field boleh null.
Example:
name String?
Output: Nullable
@id
Description: Primary key.
Example:
id Int @id
Output: Primary key
@default
Description: Nilai default untuk field.
Example:
createdAt DateTime @default(now())
Output: now()
@unique
Description: Nilai unik.
Example:
email String @unique
Output: Unique constraint
@updatedAt
Description: Otomatis diperbarui saat record diupdate.
Example:
updatedAt DateTime @updatedAt
Output: Timestamp update
@relation
Description: Mendefinisikan relasi antar model.
Example:
posts Post[] @relation("UserPosts")
Output: Relasi one-to-many
@map / @@map
Description: Memetakan field/model ke nama kolom/tabel khusus.
Example:
@map("first_name") firstName String
@@map("users")
Output: Nama asli di DB
enum
Description: Mendefinisikan tipe enum.
Example:
enum Role {
  ADMIN
  USER
}
Output: Enum Role
@@id (composite primary key)
Description: Primary key gabungan dari beberapa field.
Example:
@@id([authorId, postId])
Output: Composite key
@@unique (composite unique)
Description: Unique constraint gabungan.
Example:
@@unique([title, authorId])
Output: Composite unique
@@index
Description: Membuat index biasa.
Example:
@@index([title])
Output: Index pada title
@@fulltext (MySQL/Postgres)
Description: Full-text search index (MySQL/Postgres).
Example:
@@fulltext([title, content])
Output: Fulltext index

CLI

npx prisma init
Description: Inisialisasi Prisma di proyek, membuat folder prisma dan schema.prisma.
Example:
npx prisma init
Output: prisma/schema.prisma & .env
npx prisma generate
Description: Menghasilkan Prisma Client berdasarkan schema.
Example:
npx prisma generate
Output: node_modules/.prisma/client
npx prisma db push
Description: Menerapkan schema langsung ke database tanpa migrasi (dev).
Example:
npx prisma db push
Output: Schema tersinkron
npx prisma migrate dev
Description: Membuat migrasi dari perubahan schema dan menerapkannya.
Example:
npx prisma migrate dev --name init
Output: Folder prisma/migrations & tabel terbuat
npx prisma migrate deploy
Description: Menerapkan migrasi yang ada ke database (production).
Example:
npx prisma migrate deploy
Output: Migrasi dijalankan
npx prisma migrate reset
Description: Menghapus database dan menerapkan ulang semua migrasi.
Example:
npx prisma migrate reset
Output: Database direset
npx prisma migrate status
Description: Melihat status migrasi.
Example:
npx prisma migrate status
Output: Daftar migrasi
npx prisma studio
Description: Membuka GUI untuk melihat dan mengedit data.
Example:
npx prisma studio
Output: localhost:5555
npx prisma format
Description: Merapikan schema.prisma.
Example:
npx prisma format
Output: Schema terformat
npx prisma validate
Description: Memvalidasi schema.
Example:
npx prisma validate
Output: Schema valid
npx prisma db seed
Description: Menjalankan seeder yang didefinisikan di package.json.
Example:
npx prisma db seed
Output: Data awal terisi

CLIENT-BASIC

import { PrismaClient }
Description: Mengimpor PrismaClient.
Example:
import { PrismaClient } from '@prisma/client'
Output: PrismaClient
new PrismaClient()
Description: Membuat instance PrismaClient.
Example:
const prisma = new PrismaClient()
Output: Instance client
prisma.$connect()
Description: Membuka koneksi ke database (jarang diperlukan).
Example:
await prisma.$connect()
Output: Terkoneksi
prisma.$disconnect()
Description: Menutup koneksi.
Example:
await prisma.$disconnect()
Output: Terputus

CLIENT-QUERIES

findMany()
Description: Mengambil semua record.
Example:
const users = await prisma.user.findMany()
Output: [{...}, {...}]
findMany(where)
Description: Mengambil record dengan kondisi.
Example:
await prisma.user.findMany({ where: { name: 'Ridho' } })
Output: [{id:1, name:'Ridho'}]
findUnique()
Description: Mengambil satu record berdasarkan primary key/unique field.
Example:
await prisma.user.findUnique({ where: { id: 1 } })
Output: { id:1, name:'Ridho' }
findFirst()
Description: Mengambil record pertama yang cocok (bisa tanpa unique).
Example:
await prisma.user.findFirst({ where: { age: { gte: 18 } } })
Output: { id:2, name:'Adult' }
findFirstOrThrow()
Description: Sama seperti findFirst tapi error jika tidak ditemukan.
Example:
await prisma.user.findFirstOrThrow({ where: { id: 99 } })
Output: NotFoundError jika tidak ada
findUniqueOrThrow()
Description: Sama seperti findUnique tapi error jika tidak ditemukan.
Example:
await prisma.user.findUniqueOrThrow({ where: { id: 99 } })
Output: NotFoundError jika tidak ada

CLIENT-MUTATIONS

create()
Description: Membuat record baru.
Example:
await prisma.user.create({ data: { name: 'Baru', email: 'baru@mail.com' } })
Output: { id:3, name:'Baru', ... }
createMany()
Description: Membuat banyak record sekaligus.
Example:
await prisma.user.createMany({ data: [{ name: 'A' }, { name: 'B' }] })
Output: { count: 2 }
update()
Description: Memperbarui satu record.
Example:
await prisma.user.update({ where: { id: 1 }, data: { name: 'Updated' } })
Output: { id:1, name:'Updated' }
updateMany()
Description: Memperbarui banyak record.
Example:
await prisma.user.updateMany({ where: { age: null }, data: { age: 0 } })
Output: { count: 5 }
upsert()
Description: Update jika ada, create jika tidak.
Example:
await prisma.user.upsert({ where: { email: 'x@mail.com' }, update: { name: 'X' }, create: { name: 'X', email: 'x@mail.com' } })
Output: { id:... }
delete()
Description: Menghapus satu record.
Example:
await prisma.user.delete({ where: { id: 1 } })
Output: { id:1, ... }
deleteMany()
Description: Menghapus banyak record.
Example:
await prisma.user.deleteMany({ where: { role: 'INACTIVE' } })
Output: { count: 10 }

FILTERING

equals
Description: Sama dengan.
Example:
{ age: { equals: 25 } }
Output: age = 25
not
Description: Bukan nilai tertentu.
Example:
{ name: { not: 'Ridho' } }
Output: name != 'Ridho'
in
Description: Termasuk dalam daftar.
Example:
{ id: { in: [1,2,3] } }
Output: id IN (1,2,3)
notIn
Description: Tidak termasuk dalam daftar.
Example:
{ id: { notIn: [1,2] } }
Output: id NOT IN (1,2)
lt / lte
Description: Kurang dari / kurang dari sama dengan.
Example:
{ age: { lt: 30 } }
Output: age < 30
gt / gte
Description: Lebih dari / lebih dari sama dengan.
Example:
{ age: { gte: 18 } }
Output: age >= 18
contains
Description: Mengandung substring (case-sensitive).
Example:
{ name: { contains: 'idh' } }
Output: LIKE '%idh%'
startsWith / endsWith
Description: Diawali/diakhiri substring.
Example:
{ email: { endsWith: '@mail.com' } }
Output: LIKE '%@mail.com'
mode
Description: Mengatur case-sensitivity (default: sensitive).
Example:
{ name: { contains: 'idh', mode: 'insensitive' } }
Output: ILIKE '%idh%' (PostgreSQL)
AND
Description: Semua kondisi harus terpenuhi.
Example:
{ AND: [{ age: { gte: 18 } }, { age: { lt: 60 } }] }
Output: age >= 18 AND age < 60
OR
Description: Salah satu kondisi terpenuhi.
Example:
{ OR: [{ name: 'Ridho' }, { name: 'Khalid' }] }
Output: name = 'Ridho' OR name = 'Khalid'
NOT
Description: Negasi kondisi.
Example:
{ NOT: { age: { lt: 18 } } }
Output: NOT age < 18

SORTING-PAGINATION

orderBy
Description: Mengurutkan hasil.
Example:
orderBy: { createdAt: 'desc' }
Output: Terbaru dulu
take
Description: Membatasi jumlah hasil (LIMIT).
Example:
take: 5
Output: 5 record
skip
Description: Melewati sejumlah record (OFFSET).
Example:
skip: 10
Output: Lewati 10
cursor
Description: Pagination berbasis cursor (lebih efisien dari offset).
Example:
cursor: { id: 10 }, take: 5
Output: Mulai setelah id 10
distinct
Description: Menghilangkan duplikat pada field tertentu.
Example:
distinct: ['city']
Output: Kota unik

AGGREGASI

count()
Description: Menghitung jumlah record.
Example:
await prisma.user.count({ where: { active: true } })
Output: 42
aggregate()
Description: Agregasi (sum, avg, min, max, count).
Example:
await prisma.product.aggregate({ _avg: { price: true }, _max: { price: true } })
Output: { _avg: { price: 150 }, _max: { price: 500 } }
groupBy()
Description: Mengelompokkan dan agregasi per kelompok.
Example:
await prisma.order.groupBy({ by: ['userId'], _sum: { amount: true } })
Output: [{ userId: 1, _sum: { amount: 250 } }]

RELATIONS

include
Description: Menyertakan relasi dalam hasil (JOIN).
Example:
await prisma.user.findMany({ include: { posts: true } })
Output: { id:1, posts: [...] }
select
Description: Memilih field tertentu, termasuk relasi.
Example:
await prisma.user.findMany({ select: { id: true, name: true, posts: { select: { title: true } } } })
Output: { id, name, posts: [{title}] }
nested create
Description: Membuat record relasi sekaligus.
Example:
await prisma.user.create({ data: { name: 'Ridho', posts: { create: [{ title: 'Post 1' }] } } })
Output: User + post terbuat
connect
Description: Menghubungkan ke record yang sudah ada (one-to-one/many).
Example:
await prisma.post.create({ data: { title: 'Baru', author: { connect: { id: 1 } } } })
Output: Post terhubung ke author 1
disconnect
Description: Memutus relasi (hanya untuk relasi opsional one-to-one/one-to-many).
Example:
await prisma.user.update({ where: { id: 1 }, data: { profile: { disconnect: true } } })
Output: Relasi terputus
set
Description: Mengatur ulang relasi (many-to-many).
Example:
await prisma.post.update({ where: { id: 1 }, data: { categories: { set: [{ id: 2 }] } } })
Output: Kategori diatur
connectOrCreate
Description: Hubungkan jika ada, jika tidak buat baru.
Example:
await prisma.post.create({ data: { title: 'A', author: { connectOrCreate: { where: { email: 'x@mail.com' }, create: { name: 'X', email: 'x@mail.com' } } } } })
Output: Author terhubung atau baru
upsert relasi
Description: Upsert pada nested relation.
Example:
await prisma.user.update({ where: { id: 1 }, data: { posts: { upsert: { where: { id: 2 }, update: { title: 'Updated' }, create: { title: 'New' } } } } })
Output: Post diupdate atau dibuat
delete relasi
Description: Menghapus nested record.
Example:
await prisma.user.update({ where: { id: 1 }, data: { posts: { delete: { id: 2 } } } })
Output: Post dihapus

RAW-QUERIES

$queryRaw
Description: Menjalankan query SQL mentah (SELECT).
Example:
await prisma.$queryRaw`SELECT * FROM users WHERE id = ${id}`
Output: Array hasil query
$executeRaw
Description: Menjalankan perintah SQL mentah (INSERT/UPDATE/DELETE).
Example:
await prisma.$executeRaw`UPDATE users SET name = ${name} WHERE id = ${id}`
Output: Jumlah baris terpengaruh

TRANSACTIONS

$transaction (interactive)
Description: Transaksi interaktif, bisa melakukan operasi berurutan dengan logika JavaScript.
Example:
await prisma.$transaction(async (tx) => {
  const user = await tx.user.create({ data: { ... } });
  await tx.post.create({ data: { ... } });
})
Output: Semua berhasil atau rollback
$transaction (batch)
Description: Transaksi batch untuk operasi independen secara paralel.
Example:
await prisma.$transaction([
  prisma.user.create({ data: { ... } }),
  prisma.post.create({ data: { ... } })
])
Output: Array hasil

MIDDLEWARE

$use
Description: Menambahkan middleware untuk modifikasi query/logging.
Example:
prisma.$use(async (params, next) => {
  console.log(params.action);
  return next(params);
})
Output: Logging setiap query

ADVANCED

$extends
Description: Memperluas fungsionalitas Prisma Client (custom method).
Example:
const prismaWithUser = prisma.$extends({
  model: { user: { myCustomFind: async () => { ... } } }
})
Output: Client kustom
$on
Description: Mendengarkan event Prisma Client (seperti query, error).
Example:
prisma.$on('query', (e) => { console.log(e.query) })
Output: Setiap query tercatat
soft deletes
Description: Menghapus dengan menandai deletedAt alih-alih delete sebenarnya (via middleware).
Example:
prisma.$use(async (params, next) => { if (params.action === 'delete') { ... } })
Output: Soft delete
connection pooling
Description: Menggunakan pgBouncer atau pool bawaan untuk production.
Example:
datasource db { ... } dan atur connection_limit di connection string
Output: Koneksi terbatas
query logging
Description: Mengaktifkan log untuk debugging.
Example:
const prisma = new PrismaClient({ log: ['query', 'info', 'warn', 'error'] })
Output: Log di konsol