Storages
Koneksi database lewat NexaDb, query aman lewat NexaModel - pilih tabel dengan Storage() / table(), rantai where, orderBy, get / first.
NexaModel · Storage() · NexaDb
$this->Storage('news')->where()->first();Alur baca backend
Models → Storages (halaman ini) → Pengantar (seri bab).
Apa yang dimaksud storage di sini
Di Nexa Dom, storage mengacu pada penyimpanan data di database yang diakses lewat lapisan App\System\Storage\NexaDb (singleton PDO) dan NexaModel. Saat useModels() memanggil method pada model, framework menginstansiasi model tersebut; konstruktor NexaModel mengambil koneksi dari NexaDb::getInstance()->getConnection() — Anda tidak perlu menulis new PDO di controller.
Exasmple dan pola Storage().
| Tahap | Keterangan |
|---|---|
.env |
DB_HOST, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PORT, DB_CHARSET — wajib konsisten dengan server MySQL/MariaDB Anda. |
NexaDb |
Singleton koneksi; dipakai internal oleh NexaModel. |
Storage($tabel) |
Menetapkan tabel untuk rantai query (alias method table()). |
| Controller | Tetap memanggil model lewat useModels('Exasmple', 'newsById', [$id]); detail alur view ada di Models. |
Konfigurasi database
Selaras dengan bagian instalasi di Getting Started dan Instalasi dan Konfigurasi (bab Storages):
Variabel lingkungan
DB_HOST=localhost
DB_USERNAME=root
DB_PASSWORD=
DB_DATABASE=nexa_db
DB_PORT=3306
DB_CHARSET=utf8mb4Menentukan tabel: Storage() dan table()
Menurut API di NexaModel, Storage('nama_tabel') dan table('nama_tabel') sama: mengatur tabel aktif untuk query berantai (select, where, get, first, insert, dll.). Nama tabel divalidasi (alphanumeric, underscore, titik).
Rantai query
$rows = $this->Storage('news')
->where('status', 'published')
->orderBy('id', 'DESC')
->limit(10)
->get();
$one = $this->Storage('news')->where('id', 1)->first();Contoh standar — models/Exasmple.php
File ini memuat dua pola: method data() tanpa DB (untuk demo blok view), dan method yang memakai Storage('news') untuk baca tabel news. Pastikan tabel tersebut ada di database Anda (buat lewat migrasi atau SQL manual).
Exasmple — cuplikan
public function newsById(int $id): ?array
{
if ($id < 1) {
return null;
}
return $this->Storage('news')->where('id', '=', $id)->first();
}
public function latestNews(int $limit = 5): array
{
return $this->Storage('news')
->orderBy('id', 'DESC')
->limit($limit)
->get();
}Untuk memanggil dari controller: $this->useModels('Exasmple', 'newsById', [1]); atau 'latestNews', [5].
ExampleController.php — pola yang sama
Contoh lengkap halaman /example (method data() + nexaBlock tanpa query DB wajib) ada di Models (bagian 3.2). Di bawah ini pola terpisah untuk membaca tabel lewat newsById — tetap memakai useModels('Exasmple', 'newsById', [1]) atau model produksi seperti News::findById:
Cuplikan di index()
$news = $this->useModels('Exasmple', 'newsById', [1]);
$this->assignVars(['news' => $news]);Atau gabungkan ke array nexaBlock seperti pada contoh blok food di Models.
Dari model ke view
Hasil array dari newsById / latestNews dapat Anda gabung ke assignVars atau nexaBlock seperti di halaman Models & blok view. Query builder lengkap, transaksi, dan helper lain ada di Query Builder dan bab terkait di dokumentasi Storages.
Lanjut
Topik sebelumnya: Models — useModels & nexaBlock. Topik berikutnya: Pengantar (awal seri bab Storages). Lihat juga Models, Events, Helper & template, daftar dokumentasi.