Model & ORM
NusaFramework menyediakan ORM (Object-Relational Mapping) sederhana — query database tanpa menulis SQL berulang-ulang.
Referensi Fungsi ORM
| Fungsi | Deskripsi | SQL Setara |
|---|---|---|
daftar_model(nama, tabel) | Daftarkan model ke registry | — |
Model_semua(nama) | Ambil semua baris | SELECT * FROM tabel |
Model_semua(nama, orderBy) | Ambil semua dengan urutan | SELECT * ... ORDER BY |
Model_temukan(nama, id) | Cari satu baris by ID | SELECT * WHERE id=? |
Model_cari(nama, kolom, nilai) | Cari baris berdasarkan kolom | SELECT * WHERE kolom=? |
Model_buat(nama, data) | Insert baris baru | INSERT INTO tabel ... |
Model_perbarui(nama, id, data) | Update baris by ID | UPDATE tabel SET ... WHERE id=? |
Model_hapus(nama, id) | Hapus baris by ID | DELETE FROM tabel WHERE id=? |
Model_hitung(nama) | Hitung total baris | SELECT COUNT(*) FROM tabel |
db_framework(db) | Atur/ambil koneksi DB global | — |
Mendaftarkan Model
app/model/Produk.ns
// Daftarkan model ke ORM registry NusaFramework
// Parameter: nama_model, nama_tabel
daftar_model("Produk", "produk")
// Fungsi query kustom untuk model ini
fungsi Produk_aktif() {
buat db = db_framework()
kembalikan db_ambil_semua(db, "SELECT * FROM produk WHERE aktif=1 ORDER BY id DESC")
}
fungsi Produk_kategori(kategori) {
buat db = db_framework()
kembalikan db_ambil_semua(db,
"SELECT * FROM produk WHERE kategori=? AND aktif=1", kategori)
}
Operasi CRUD Lengkap
Semua Operasi ORM
// === SELECT ALL ===
buat semua = Model_semua("Produk")
// → Array semua produk
// SELECT ALL dengan urutan
buat terurut = Model_semua("Produk", "harga ASC")
// → Array produk diurutkan dari termurah
// === SELECT ONE ===
buat produk = Model_temukan("Produk", 5)
// → Satu peta produk atau nihil
jika produk == nihil {
tampilkan("Produk tidak ditemukan")
}
tampilkan("Nama:", ambil(produk, "nama"))
// === SELECT WHERE ===
buat laptop = Model_cari("Produk", "kategori", "laptop")
// → Array produk dengan kategori laptop
// === INSERT ===
Model_buat("Produk", {
"nama" : "NusaBook Pro",
"deskripsi" : "Laptop tipis performa tinggi",
"harga" : 12500000,
"stok" : 15,
"kategori" : "laptop"
})
// === UPDATE ===
Model_perbarui("Produk", 5, {
"harga" : 11500000,
"stok" : 20
})
// === DELETE ===
Model_hapus("Produk", 5)
// === COUNT ===
buat total = Model_hitung("Produk")
tampilkan("Total produk:", total)
Query SQL Kustom
Untuk query yang lebih kompleks, gunakan db_ambil_semua dan db_ambil_satu langsung:
Query JOIN dan Agregasi
buat db = db_framework()
// Query JOIN
buat pesanan = db_ambil_semua(db, "
SELECT p.*, u.nama as nama_pengguna
FROM pesanan p
JOIN pengguna u ON u.id = p.pengguna_id
WHERE p.status = ?
ORDER BY p.dibuat_pada DESC
LIMIT 20
", "pending")
// Agregasi
buat statistik = db_ambil_satu(db, "
SELECT
COUNT(*) as total_produk,
SUM(stok) as total_stok,
AVG(harga) as rata_harga,
MAX(harga) as harga_tertinggi
FROM produk WHERE aktif=1
")
tampilkan("Total produk:", ambil(statistik, "total_produk"))
tampilkan("Rata-rata harga:", format_rupiah(ambil(statistik, "rata_harga")))
Koneksi Database Framework
Setup di server.ns
// Buka koneksi database
buat db = db_buka(DB_DRIVER, DB_PATH)
// → DB_DRIVER: "sqlite" atau "mysql"
// → DB_PATH: path file SQLite atau DSN MySQL
// Simpan ke framework — bisa diakses dari mana saja
db_framework(db)
// Akses dari model/kontroler manapun:
buat db = db_framework() // dapatkan koneksi yang tersimpan
📌 Penting: Panggil
db_framework(db) di server.ns sebelum memuat model apapun. Jika tidak, fungsi ORM seperti Model_semua akan error karena koneksi belum ada.