Detail Artikel

Detail Artikel

saya punya masalah,saya ingin membuat form cari identitas siswa,tetapi jika cuma 1 tabel untuk 1000 siswa maka database akan lambat,oleh karena itu sy mau buat filter,,mulai dari nama prov,nama kab, nama kecamatan, nama desa, nama sekolah dan terakhir kode siswa.. identitas siswa yg dicari (nama,kelas,alamat) bgm cara buat dengan CI4
ChatGPT said:
ChatGPT

Untuk mengatasi masalah performa yang terjadi akibat query yang besar pada satu tabel yang berisi 1000 siswa, Anda bisa mengimplementasikan sistem filter bertahap pada aplikasi Anda menggunakan CodeIgniter 4 (CI4). Anda dapat membuat form pencarian yang memungkinkan pengguna untuk memilih filter berdasarkan kategori tertentu seperti provinsi, kabupaten, kecamatan, desa, sekolah, dan kode siswa. Berikut adalah langkah-langkah dan contoh implementasi untuk membuat form pencarian menggunakan filter di CI4.

Langkah 1: Buat Model untuk Siswa

Model ini akan berfungsi untuk mengambil data siswa dari database sesuai dengan filter yang diberikan.

php
// app/Models/SiswaModel.php namespace App\Models; use CodeIgniter\Model; class SiswaModel extends Model { protected $table = 'siswa'; // Nama tabel siswa di database protected $primaryKey = 'id_siswa'; // Kolom primary key protected $allowedFields = ['nama', 'kelas', 'alamat', 'provinsi', 'kabupaten', 'kecamatan', 'desa', 'sekolah', 'kode_siswa']; // Fungsi untuk mencari siswa berdasarkan filter public function cariSiswa($filter) { $builder = $this->builder(); if (!empty($filter['provinsi'])) { $builder->where('provinsi', $filter['provinsi']); } if (!empty($filter['kabupaten'])) { $builder->where('kabupaten', $filter['kabupaten']); } if (!empty($filter['kecamatan'])) { $builder->where('kecamatan', $filter['kecamatan']); } if (!empty($filter['desa'])) { $builder->where('desa', $filter['desa']); } if (!empty($filter['sekolah'])) { $builder->where('sekolah', $filter['sekolah']); } if (!empty($filter['kode_siswa'])) { $builder->where('kode_siswa', $filter['kode_siswa']); } // Menambahkan kondisi untuk nama siswa jika dicari if (!empty($filter['nama'])) { $builder->like('nama', $filter['nama']); } return $builder->get()->getResult(); } }

Langkah 2: Buat Controller untuk Menangani Pencarian

Controller ini akan menerima input dari form pencarian dan mengirim data hasil pencarian ke view.

php
// app/Controllers/SiswaController.php namespace App\Controllers; use App\Models\SiswaModel; class SiswaController extends BaseController { public function index() { $model = new SiswaModel(); $data = []; // Cek jika ada data yang dikirimkan dari form filter if ($this->request->getMethod() === 'post') { $filter = [ 'provinsi' => $this->request->getPost('provinsi'), 'kabupaten' => $this->request->getPost('kabupaten'), 'kecamatan' => $this->request->getPost('kecamatan'), 'desa' => $this->request->getPost('desa'), 'sekolah' => $this->request->getPost('sekolah'), 'kode_siswa' => $this->request->getPost('kode_siswa'), 'nama' => $this->request->getPost('nama') ]; // Mengambil data siswa berdasarkan filter $data['siswa'] = $model->cariSiswa($filter); } // Menyertakan data filter dan siswa ke dalam view return view('siswa/cari_siswa', $data); } }

Langkah 3: Buat View untuk Form Pencarian

View ini akan menampilkan form pencarian dan hasilnya jika ada.

php
<!-- app/Views/siswa/cari_siswa.php --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Cari Identitas Siswa</title> </head> <body> <h2>Cari Identitas Siswa</h2> <form method="post" action="/siswa"> <label>Provinsi:</label> <input type="text" name="provinsi" value="<?= old('provinsi') ?>" placeholder="Provinsi"><br> <label>Kabupaten:</label> <input type="text" name="kabupaten" value="<?= old('kabupaten') ?>" placeholder="Kabupaten"><br> <label>Kecamatan:</label> <input type="text" name="kecamatan" value="<?= old('kecamatan') ?>" placeholder="Kecamatan"><br> <label>Desa:</label> <input type="text" name="desa" value="<?= old('desa') ?>" placeholder="Desa"><br> <label>Sekolah:</label> <input type="text" name="sekolah" value="<?= old('sekolah') ?>" placeholder="Sekolah"><br> <label>Kode Siswa:</label> <input type="text" name="kode_siswa" value="<?= old('kode_siswa') ?>" placeholder="Kode Siswa"><br> <label>Nama Siswa:</label> <input type="text" name="nama" value="<?= old('nama') ?>" placeholder="Nama Siswa"><br> <button type="submit">Cari</button> </form> <h3>Hasil Pencarian</h3> <?php if (isset($siswa) && count($siswa) > 0): ?> <table> <thead> <tr> <th>Nama</th> <th>Kelas</th> <th>Alamat</th> </tr> </thead> <tbody> <?php foreach ($siswa as $row): ?> <tr> <td><?= esc($row->nama) ?></td> <td><?= esc($row->kelas) ?></td> <td><?= esc($row->alamat) ?></td> </tr> <?php endforeach; ?> </tbody> </table> <?php elseif (isset($siswa)): ?> <p>Data tidak ditemukan.</p> <?php endif; ?> </body> </html>

Langkah 4: Routing

Pastikan Anda sudah menambahkan route untuk controller SiswaController di file app/Config/Routes.php.

php
// app/Config/Routes.php $routes->get('/siswa', 'SiswaController::index'); $routes->post('/siswa', 'SiswaController::index');

Penjelasan:

  1. Model (SiswaModel): Fungsi cariSiswa() akan mengambil data siswa berdasarkan filter yang diberikan, seperti provinsi, kabupaten, kecamatan, desa, sekolah, kode siswa, dan nama siswa. Anda bisa menambahkan kriteria pencarian lainnya sesuai kebutuhan.
  2. Controller (SiswaController): Controller ini menerima data filter dari form pencarian dan mengirimkannya ke model untuk mendapatkan hasil yang sesuai. Kemudian, hasil pencarian dikirim ke view.
  3. View (cari_siswa.php): Form pencarian memungkinkan pengguna untuk memilih filter dan menampilkan hasil pencarian dalam bentuk tabel.

Dengan cara ini, pencarian data siswa menjadi lebih efisien karena Anda memecahnya ke dalam filter, sehingga query yang dijalankan di database menjadi lebih kecil dan cepat.

Codeigniter 4