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
Membuat Filtering Bertingkat
Dibaca 2 kali
Detail Artikel
ChatGPT said:
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:
- 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. - 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.
- 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