- Method - Nama method Prisma
- Fungsi - Deskripsi kegunaan method
- Return - Tipe data yang dikembalikan
- SQL Equivalent - Perbandingan dengan SQL tradisional
✏️ CREATE Methods
| Method | Fungsi | Return | SQL Equivalent |
|---|---|---|---|
create() |
Buat 1 record baru | Object (record yang dibuat) |
INSERT INTO table (col1, col2)
VALUES (val1, val2) RETURNING *; |
createMany() |
Buat banyak records sekaligus | { count: number } |
INSERT INTO table (col1, col2)
VALUES (val1, val2), (val3, val4); |
createManyAndReturn() |
Buat banyak records dan kembalikan data | Array of objects |
INSERT INTO table (col1, col2)
VALUES (val1, val2), (val3, val4) RETURNING *; |
upsert() |
Update jika ada, create jika tidak ada | Object |
-- PostgreSQL
INSERT INTO table (id, col1) VALUES (1, 'val') ON CONFLICT (id) DO UPDATE SET col1 = 'val'; |
📖 READ Methods
| Method | Fungsi | Return | SQL Equivalent |
|---|---|---|---|
findUnique() |
Cari record by unique field (@id, @unique) | Object atau null |
SELECT * FROM table
WHERE unique_field = value LIMIT 1; |
findUniqueOrThrow() |
Cari record unique, throw error jika tidak ketemu | Object |
-- Manual error handling
SELECT * FROM table WHERE unique_field = value; |
findFirst() |
Cari record pertama yang memenuhi kondisi | Object atau null |
SELECT * FROM table
WHERE conditions LIMIT 1; |
findFirstOrThrow() |
Cari record pertama, throw error jika tidak ketemu | Object |
-- Manual error handling
SELECT * FROM table WHERE conditions LIMIT 1; |
findMany() |
Cari banyak records dengan filter | Array of objects |
SELECT * FROM table
WHERE conditions ORDER BY column LIMIT count OFFSET skip; |
aggregate() |
Agregasi data (count, avg, sum, min, max) | { _count, _avg, _sum, _min, _max } |
SELECT
COUNT(*), AVG(column), SUM(column), MIN(column), MAX(column) FROM table; |
groupBy() |
Group data dengan agregasi | Array of grouped objects |
SELECT column, COUNT(*), AVG(column)
FROM table GROUP BY column HAVING condition; |
count() |
Hitung jumlah records | Number |
SELECT COUNT(*) FROM table
WHERE conditions; |
🔄 UPDATE Methods
| Method | Fungsi | Return | SQL Equivalent |
|---|---|---|---|
update() |
Update 1 record | Object (record yang diupdate) |
UPDATE table
SET col1 = val1, col2 = val2 WHERE id = 1 RETURNING *; |
updateMany() |
Update banyak records | { count: number } |
UPDATE table
SET col1 = val1 WHERE conditions; |
upsert() |
Update atau create record | Object |
-- PostgreSQL
INSERT INTO table (id, col1) VALUES (1, 'val') ON CONFLICT (id) DO UPDATE SET col1 = 'val' RETURNING *; |
🗑️ DELETE Methods
| Method | Fungsi | Return | SQL Equivalent |
|---|---|---|---|
delete() |
Hapus 1 record | Object (record yang dihapus) |
DELETE FROM table
WHERE id = 1 RETURNING *; |
deleteMany() |
Hapus banyak records | { count: number } |
DELETE FROM table
WHERE conditions; |
📊 AGGREGATION Methods
| Method | Fungsi | Return | SQL Equivalent |
|---|---|---|---|
aggregate() |
Operasi agregasi dasar | { _count, _avg, _sum, _min, _max } |
SELECT
COUNT(*), AVG(col), SUM(col), MIN(col), MAX(col) FROM table; |
groupBy() |
Group data dengan agregasi | Array of grouped objects |
SELECT category, COUNT(*), AVG(price)
FROM products GROUP BY category HAVING AVG(price) > 100; |
_count |
Hitung jumlah relasi | Number |
SELECT u.*,
(SELECT COUNT(*) FROM posts p WHERE p.user_id = u.id) as post_count FROM users u; |
🔍 FILTER Operators
| Operator | Fungsi | Contoh Prisma | SQL Equivalent |
|---|---|---|---|
equals |
Sama dengan | { name: { equals: 'John' } } |
WHERE name = 'John'
|
not |
Tidak sama dengan | { name: { not: 'John' } } |
WHERE name != 'John'
|
in |
Ada dalam array | { role: { in: ['ADMIN', 'USER'] } } |
WHERE role IN ('ADMIN', 'USER')
|
notIn |
Tidak ada dalam array | { role: { notIn: ['ADMIN'] } } |
WHERE role NOT IN ('ADMIN')
|
lt |
Less than (kurang dari) | { age: { lt: 18 } } |
WHERE age < 18
|
lte |
Less than or equal | { age: { lte: 18 } } |
WHERE age <= 18
|
gt |
Greater than (lebih dari) | { age: { gt: 18 } } |
WHERE age > 18
|
gte |
Greater than or equal | { age: { gte: 18 } } |
WHERE age >= 18
|
contains |
Mengandung string | { name: { contains: 'John' } } |
WHERE name LIKE '%John%'
|
startsWith |
Dimulai dengan string | { name: { startsWith: 'Jo' } } |
WHERE name LIKE 'Jo%'
|
endsWith |
Diakhiri dengan string | { name: { endsWith: 'hn' } } |
WHERE name LIKE '%hn'
|
AND |
Logical AND |
{ AND: [{ age: { gt: 18 } }, { role: 'USER' }] }
|
WHERE age > 18 AND role = 'USER'
|
OR |
Logical OR |
{ OR: [{ role: 'ADMIN' }, { role: 'MODERATOR' }]
}
|
WHERE role = 'ADMIN' OR role = 'MODERATOR'
|
NOT |
Logical NOT | { NOT: { role: 'ADMIN' } } |
WHERE NOT role = 'ADMIN'
|
🔗 RELATION Filters
| Filter | Fungsi | Contoh Prisma | SQL Equivalent |
|---|---|---|---|
some |
Minimal satu relasi memenuhi kondisi |
{ posts: { some: { published: true } } }
|
WHERE EXISTS (
SELECT 1 FROM posts p WHERE p.user_id = users.id AND p.published = true ) |
every |
Semua relasi memenuhi kondisi |
{ posts: { every: { published: true } } }
|
WHERE NOT EXISTS (
SELECT 1 FROM posts p WHERE p.user_id = users.id AND p.published = false ) |
none |
Tidak ada relasi yang memenuhi kondisi |
{ posts: { none: { published: false } } }
|
WHERE NOT EXISTS (
SELECT 1 FROM posts p WHERE p.user_id = users.id AND p.published = false ) |
is |
Relasi one-to-one memenuhi kondisi |
{ profile: { is: { bio: { contains: 'developer' } } }
}
|
SELECT u.* FROM users u
INNER JOIN profiles p ON p.user_id = u.id WHERE p.bio LIKE '%developer%' |
isNot |
Relasi one-to-one tidak memenuhi kondisi |
{ profile: { isNot: { bio: { contains: 'developer' } }
} }
|
SELECT u.* FROM users u
LEFT JOIN profiles p ON p.user_id = u.id WHERE p.bio NOT LIKE '%developer%' OR p.bio IS NULL |
💰 TRANSACTION Methods
| Method | Fungsi | Return | SQL Equivalent |
|---|---|---|---|
$transaction() |
Batch transaction (array of operations) | Array of results |
BEGIN;
INSERT INTO ...; UPDATE ...; COMMIT; |
$transaction() |
Interactive transaction (callback) | Callback return value |
BEGIN;
-- multiple operations COMMIT; |
⚡ RAW QUERY Methods
| Method | Fungsi | Return | SQL Equivalent |
|---|---|---|---|
$queryRaw() |
Execute raw SELECT query | Array of objects |
SELECT * FROM table
WHERE custom_condition; |
$executeRaw() |
Execute raw UPDATE/DELETE query | { count: number } |
UPDATE table SET col = val
WHERE custom_condition; |
$queryRawUnsafe() |
Execute raw query (unsafe) | Array of objects |
-- Dynamic SQL query
|
🔧 CLIENT Methods
| Method | Fungsi | Return | Keterangan |
|---|---|---|---|
$connect() |
Connect ke database | Promise<void> | Biasanya otomatis |
$disconnect() |
Disconnect dari database | Promise<void> | Penting untuk cleanup |
$on() |
Event listener untuk query, error, info | void | Untuk logging dan debugging |
$use() |
Middleware untuk Prisma Client | void | Untuk modifikasi query/result |
-
Gunakan
findUniqueOrThrow()untuk menghindari null check manual -
createMany()lebih efisien untuk bulk insert - Gunakan transaction untuk operasi yang harus atomic
-
Hindari
$queryRawUnsafe()jika mungkin untuk mencegah SQL injection - Selalu
$disconnect()di akhir aplikasi