Dropdown Dinamis Dengan Laravel Jquery Ajax
13 May 2021 | Tags: Dropdown Dinamis Dengan Laravel Jquery Ajax, Kabupaten Kecamatan Desa, Laravel Jquery Ajax
Pada tutorial kali ini kita akan membahas bagaimana cara membuat dropdown dinamis dengan Laravel Jquery Ajax. Dropdown dinamis berguna dalam mengambil data dari tabel yang berrelasi misalnya kabupaten dengan kecamatan, kategori dengan produk. Dengan cara ini dropdown akan terisi secara dinamis tanpa harus me-refresh halaman.
Contoh kasus yang akan kita ulas adalah bagaimana menerapkan dropdown dinamis untuk relasi antara kabupaten, kecamatan dan desa. Begitu kita memilih salah satu kabupaten, maka pada dropdown kecamatan akan terisi daftar kecamatan yang sesuai dengan kabupaten yang dipilih. Begitu juga daftar desa akan difilter sesuai dengan kecamatan yang dipilih.
Implementasi kasus ini menggunakan Laravel 8, database MariaDB atau MySql.
Adapun langkah-langkahnya adalah sebagai berikut:
- Persiapan Database
- Pembuatan Model
- Pembuatan Controller
- Pembuatan View
- Pengaturan Route
- Pembuatan File Javascript
Persiapan Database
Pada tahap awal anda buat dulu sebuah database. Pada materi ini database diberi nama: dbwilayah. berikutnya atur file .env pada bagian database sesuai dengan konfigurasi pada komputer anda. Misalnya:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=dbwilayah DB_USERNAME=root DB_PASSWORD=info
Tabel yang kita perlukan ada 3 yaitu: tbl_kabupaten, tbl_kecamatan dan tbl_desa. Untuk membuat tabel yang diperlukan anda bisa menggunakan fasilitas migration atau langsung membuatnya di MariaDB/MySql. Adapun relasinya dapat dilihat pada gambar berikut.
Tabel: tbl_kabupaten
CREATE TABLE `tbl_kabupaten` ( `kab_kode` char(4) PRIMARY KEY, `kab_nama` varchar(100) DEFAULT NULL, `kab_prov` char(2) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Tabel: tbl_kecamatan
CREATE TABLE `tbl_kecamatan` ( `kec_kode` char(7) PRIMARY KEY, `kec_nama` varchar(100) DEFAULT NULL, `kec_kab` char(4) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Tabel: tbl_desa
CREATE TABLE `tbl_desa` ( `desa_kode` char(10) PRIMARY KEY, `desa_nama` varchar(100) DEFAULT NULL, `desa_kec` char(7) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Pembuatan Model
Untuk mengakses database kita akan menggunakan Eloquent, sehingga perlu membuat 3 buah model yaitu: Kabupaten, Kecamatan, dan Desa. Untuk membuat model bisa dengan menggunakan perintah PHP Artisan maupun manual.
Model: Kabupaten
Pada command line ketikkan perintah:
php artisan make:model Kabupaten
Sehingga akan terbentuk model dengan nama Kabupaten.php. Berikutnya ubah file tersebut menjadi:
<?php //Lokasi File : App/Models/Kabupaten.php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Kabupaten extends Model { use HasFactory; protected $table = 'tbl_kabupaten'; protected $fillable = [ 'kab_nama', 'kab_prov' ]; protected $primaryKey = 'kab_kode'; public $incrementing = false; protected $keyType = 'string'; }
Model: Kecamatan
Pada command line ketikkan perintah:
php artisan make:model Kecamatan
Edit file Kecamatan.php menjadi:
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Kecamatan extends Model { use HasFactory; protected $table = 'tbl_kecamatan'; protected $fillable = [ 'kec_nama', 'kec_kab' ]; protected $primaryKey = 'kec_kode'; public $incrementing = false; protected $keyType = 'string'; }
Model: Desa
Pada command line ketikkan perintah:
php artisan make:model Desa
Ubah file Desa.php menjadi:
<?php //Lokasi File: App/Models/Desa.php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Desa extends Model { use HasFactory; protected $table = 'tbl_desa'; protected $fillable = [ 'desa_nama', 'desa_kec' ]; protected $primaryKey = 'desa_kode'; public $incrementing = false; protected $keyType = 'string'; }
Pembuatan Controller
Pada materi ini kita akan membuat sebuah controller untuk menangani tampilan awal dan akses data dengan nama HomeController. Pada command line ketikkan perintah:
php artisan make:controller HomeController
Kita ubah HomeController menjadi:
<?php //Lokasi File: app/Http/Controllers/HomeController.php namespace App\Http\Controllers; use App\Models\Kabupaten; use App\Models\Kecamatan; use App\Models\Desa; use Illuminate\Http\Request; class HomeController extends Controller { public function index(){ $kabupaten = Kabupaten::all(); return view('home',['page_title'=>'Daftar Kabupaten','kabupaten'=>$kabupaten]); } public function getKecamatan(Request $request){ $kecamatan = Kecamatan::where("kec_kab",$request->kabID)->pluck('kec_kode','kec_nama'); return response()->json($kecamatan); } public function getDesa(Request $request){ $desa = Desa::where("desa_kec",$request->kecID)->pluck('desa_kode','desa_nama'); return response()->json($desa); } }
Pada HomeController tersebut semua model yang kita buat dipanggil semuanya. Controller ini terdiri dari 3 method yaitu: index, getKecamatan, dan getDesa. Method index berfungsi untuk memanggil view untuk tampilan awal. Method getKecamatan berfungsi untuk menghasilkan data kecamatan sesuai dengan kabupaten yang dipilih dalam format JavaScript Object Notation (JSON). Dimana JSON ini akan digunakan pada file Javascript untuk mengisi dropdown kecamatan secara dinamis. Terakhir method getDesa akan menghasilkan data JSON desa sesuai dengan kecamatan yang dipilih.
Pembuatan View
Disini kita akan membuat sebuah user interfaces yang berisi form dropdown dinamis. View ini menggunakan Bootstrap versi 5.0. Adapun Jquery yang digunakan versi 3.6.0. View kita beri nama dengan : home.blade.php (Lokasi: resources/views/home.blade.php)
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0" crossorigin="anonymous"> <title>Form Dinamis</title> </head> <body class="bg-secondary text-white"> <div class="container"> <h1 class="text-center mt-5">Dropdown Dinamis Dengan Laravel Jquery Ajax</h1> <hr /> <form> <div class="row mb-3"> <div class="col-3"> <label class="form-label">Kabupaten</label> </div> <div class="col-9"> <select class="form-select form-select-lg" name="kabupaten" id="kabupaten"> <option selected>---Pilih Kabupaten/Kota---</option> @foreach ($kabupaten as $r_kab) <option value="{{$r_kab->kab_kode}}">{{$r_kab->kab_nama}}</option> @endforeach </select> </div> </div> <div class="row mb-3"> <div class="col-3"> <label class="form-label">Kecamatan</label> </div> <div class="col-9"> <select class="form-select form-select-lg" name="kecamatan" id="kecamatan"> <option selected>---Pilih Kecamatan---</option> </select> </div> </div> <div class="row mb-3"> <div class="col-3"> <label class="form-label">Desa</label> </div> <div class="col-9"> <select class="form-select form-select-lg" name="desa" id="desa"> <option selected>---Pilih Desa---</option> </select> </div> </div> </form> </div> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-p34f1UUtsS3wqzfto5wAAmdvj+osOnFyQFpp4Ua3gs/ZVWx6oOypYoCJhGGScy+8" crossorigin="anonymous"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="{{url('wilayah.js')}}"></script> </body> </html>
Pengaturan Route
Adapun route yang kita perlukan adalah seperti berikut:
<?php //Lokasi: routes/web.php use Illuminate\Support\Facades\Route; use App\Http\Controllers\HomeController; Route::get('/', [HomeController::class, 'index']); Route::get('/getkecamatan', [HomeController::class, 'getKecamatan']); Route::get('/getdesa', [HomeController::class, 'getDesa']);
Pembuatan File Javascript
Langkah terakhir dari materi ini adalah membuat file Javascript berupa Jquery. Adapun perintahnya adalah sebagai berikut:
//Lokasi: public/wilayah.js $('#kabupaten').change(function(){ var kabID = $(this).val(); if(kabID){ $.ajax({ type:"GET", url:"/getkecamatan?kabID="+kabID, dataType: 'JSON', success:function(res){ if(res){ $("#kecamatan").empty(); $("#desa").empty(); $("#kecamatan").append('<option>---Pilih Kecamatan---</option>'); $("#desa").append('<option>---Pilih Desa---</option>'); $.each(res,function(nama,kode){ $("#kecamatan").append('<option value="'+kode+'">'+nama+'</option>'); }); }else{ $("#kecamatan").empty(); $("#desa").empty(); } } }); }else{ $("#kecamatan").empty(); $("#desa").empty(); } }); $('#kecamatan').change(function(){ var kecID = $(this).val(); if(kecID){ $.ajax({ type:"GET", url:"getdesa?kecID="+kecID, dataType: 'JSON', success:function(res){ if(res){ $("#desa").empty(); $("#desa").append('<option>---Pilih Desa---</option>'); $.each(res,function(nama,kode){ $("#desa").append('<option value="'+kode+'">'+nama+'</option>'); }); }else{ $("#desa").empty(); } } }); }else{ $("#desa").empty(); } });
File tersebut berisi 2 event function yaitu ketika perubahan pada kabupaten dan kecamatan. Pada saat memilih salah satu kabupaten pada dropdown, maka AJAX akan mengakses URL getkecamatan. URL getkecamatan akan mengakses method getKecamatan dari HomeController yang menghasilkan JSON data kecamatan. Data kecamatan yang dihasilkan akan diisi pada dropdown kecamatan secara dinamis. Begitu juga ketika mengakses getdesa, proses kerjanya sama.
Untuk menjalankan aplikasi, pada command line kita perintah: php artisan serve.
Kalau berhasil, mungkin anda bisa mengembangkannya dengan mulai dari memilih provinsi terlebih dahulu. Jika anda memahami konsepnya, seharusnya tidak akan menemui kendala berarti. Selamat mencoba
Download Dropdown Dinamis Dengan Laravel Jquery Ajax
Klik tombol Facebook / Twitter / Google + untuk Download
Komentar tentang Dropdown Dinamis Dengan Laravel Jquery Ajax