Download the PHP package sejator/ci4-datatables without Composer
On this page you can find all versions of the php package sejator/ci4-datatables. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download sejator/ci4-datatables
More information about sejator/ci4-datatables
Files in sejator/ci4-datatables
Package ci4-datatables
Short Description Library DataTables server-side untuk CodeIgniter 4
License MIT
Informations about the package ci4-datatables
📘 CI4 DataTables Helper
Library helper untuk integrasi jQuery DataTables (server-side) di CodeIgniter 4, dengan fokus:
✅ Aman
✅ Mudah dipakai
✅ Siap production
Fitur Utama
- Pagination (server-side)
- Searching (global search)
- Filtering (where & conditional)
- Ordering
- Debug SQL lengkap
- Search aman (whitelist kolom)
1️⃣ Penggunaan Dasar
📌 Catatan Penting
searchable()sangat direkomendasikan- Kolom di luar whitelist tidak akan ikut di-search
- Jika searchable() tidak digunakan, fitur global search DataTables akan dinonaktifkan.
2️⃣ Dengan Filter (Where & Conditional)
Filter statis
Filter dinamis (opsional)
✔ Jika $status kosong (null, ''), filter tidak diterapkan
-
Ordering Column (Whitelist)
Untuk mengaktifkan sorting pada kolom tertentu gunakan orderable().
- Frontend:
3️⃣ Debug SQL Lengkap (Mode Debug)
Digunakan untuk melihat seluruh query yang dipakai DataTables:
- Query data
- Count total
- Count filtered
Output JSON Debug:
📌 Kegunaan debug
- Validasi pagination
- Cek search & filter
- Audit performa query
- Troubleshooting hasil DataTables
4️⃣ Dump SQL Langsung (Development Only)
Digunakan saat development untuk dump SQL dan menghentikan eksekusi.
Output:
⚠️ Jangan dipakai di production
5️⃣ Logging Query ke Log CI4
Query akan dicatat ke file log CI4:
📁 writable/logs/log-YYYY-MM-DD.php
Contoh log:
6️⃣ Search Aman (Whitelist Column)
📌 Wajib digunakan jika query menggunakan JOIN atau alias kolom.
Tanpa searchable(), DataTables dapat menghasilkan query tidak valid atau fitur pencarian tidak sesuai.
✔ Mencegah:
- SQL injection via DataTables request
- Search ke kolom yang tidak diinginkan
❌ Tanpa searchable():
- Semua kolom
searchable=truedari frontend akan dipakai - Kurang aman & sulit dikontrol
7️⃣ Ringkasan Method Penting
| Method | Fungsi |
|---|---|
from($table) |
Tentukan tabel |
select() |
Kolom yang diambil |
where() |
Filter data |
when() |
Filter kondisional |
searchable() |
Whitelist kolom search |
orderBy() |
Sorting manual |
debug() |
Tampilkan SQL lengkap |
ddSql() |
Dump SQL & stop |
logSql() |
Log SQL ke CI4 |
make() / draw() |
Eksekusi DataTables |
withRelation() |
Load relasi tanpa JOIN (lazy & nested) |
📌 make() dan draw() setara (pilih salah satu untuk konsistensi)
🔄 reset()
Digunakan untuk mengembalikan DataTables ke kondisi awal.
📌 Wajib dipakai jika instance digunakan lebih dari sekali
8️⃣ Relasi Data (withRelation)
Fitur withRelation() digunakan untuk memuat data relasi tanpa JOIN, sehingga:
✅ Aman untuk pagination ✅ Tidak menduplikasi row ✅ Performa lebih baik ✅ Cocok untuk server-side DataTables
Relasi akan dimuat setelah query utama dieksekusi dan disisipkan ke setiap row hasil.
8.1️⃣ Penggunaan Dasar
Hasil data:
8.2️⃣ Lazy Load Relasi (Direkomendasikan)
Relasi hanya akan di-load jika benar-benar digunakan pada addColumn() atau editColumn().
📌 Jika kolom tanggal tidak dipakai, query relasi tidak akan dijalankan.
8.3️⃣ Nested Relation (Relasi Bertingkat)
Mendukung relasi di dalam relasi.
Akses data:
8.4️⃣ Kenapa withRelation Tidak Menggunakan JOIN?
❌ JOIN menyebabkan:
- Duplikasi row
- Pagination tidak akurat
- Count total & filtered salah
✅ withRelation:
- Query utama tetap bersih
- Relasi di-load sekali (no N+1)
- Aman untuk DataTables server-side
8.5️⃣ Rekomendasi Best Practice
- ✔ Gunakan withRelation() untuk data child (histori, detail, log)
- ✔ Aktifkan onlyIfUsedIn untuk performa optimal
- ✔ Gunakan JOIN hanya untuk data 1–1 yang memang ditampilkan langsung
- ✔ Hindari JOIN untuk data 1–N pada DataTables