Database & Model ORM
Fluent Query Builder, model relasi, dan eager loading anti N+1.
Oktober 2026 / v1.1.0Fluent Query Builder
Larapak menyediakan antarmuka Query Builder yang ekspresif, aman dari serangan SQL Injection dengan parameterized query, dan mudah dibaca:
# Mengambil semua baris dari tabel pengguna
semua_pengguna = db.tabel("pengguna").pilih().jupuk()
# Query dengan filter kondisi (WHERE)
aktif = db.tabel("pengguna") \
.pilih(["id", "nama", "email"]) \
.ngendi("status", "=", "aktif") \
.ngendi("umur", ">=", 18) \
.urutna("nama", "ASC") \
.watesi(10) \
.jupuk()
# Mengambil baris pertama saja
siji = db.tabel("pengguna").ngendi("email", "=", "[email protected]").siji()
Operasi CRUD (Create, Read, Update, Delete)
Menambah Data Baru (Insert)
id_anyar = db.tabel("pengguna").lebokna([
"nama": "Bambang",
"email": "[email protected]",
"status": "aktif"
])
Memperbarui Data (Update)
db.tabel("pengguna") \
.ngendi("id", "=", 5) \
.anyari(["status": "nonaktif", "nama": "Bambang S."])
Menghapus Data (Delete)
db.tabel("pengguna").ngendi("id", "=", 5).busak()
Model ORM & Eager Loading (Anti N+1)
File model ORM ditempatkan di jeroan/Wujud/. Buat model baru melalui perintah CLI:
# Dialek Ngapak
ngapakin gawe:wujud Produk
# Alias standar
ngapakin make:model Produk
Untuk menghindari masalah klasik performa N+1 Query saat menampilkan data berelasi, gunakan eager loading dengan metode karo():
# Mengambil postingan beserta seluruh komentar dan data penulis dalam satu batch query optimal
artikel = Postingan.karo(["penulis", "komentar"]).ngendi("status", "=", "publikasi").jupuk()
Database Seeder (Pengisian Data Awal)
Larapak menyediakan sistem Seeder untuk mengisi data awal (seperti akun administrator, kategori default, atau data dummy pengujian) secara otomatis.
1. Membuat Berkas Seeder
# Dialek Ngapak Asli
ngapakin gawe:bibit ProdukSeeder
# Alias standar
ngapakin make:seeder ProdukSeeder
File seeder disimpan di lumbung/bibit/ProdukSeeder.ngpk:
# Database Seeder ProdukSeeder untuk Larapak
gawe tandang()
db.tabel("produk").lebokna([
"nama": "Kopi Banyumas Asli",
"harga": 25000,
"status": "tersedia"
])
tulis("Seeder ProdukSeeder selesai dijalankan.")
rampung
2. Menjalankan Seeder
# Menjalankan seeder langsung
ngapakin bibiti
# Atau: ngapakin db:seed
# Menjalankan seeder bersamaan dengan fresh migration
ngapakin migrasi:anyar --seed
# Atau: ngapakin migrate:fresh --seed