edi-prasetyo / indonesia-location
Indonesia administrative region database for Laravel
Package info
github.com/edi-prasetyo/indonesia-location
pkg:composer/edi-prasetyo/indonesia-location
Requires
- php: ^8.1
- illuminate/support: ^11.0|^12.0|^13.0
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
edi-prasetyo/indonesia-location adalah package Laravel untuk menyediakan data wilayah administratif Indonesia (Provinsi, Kabupaten/Kota, Kecamatan, Desa) lengkap dengan relasi database dan model Eloquent.
Package ini dirancang untuk:
- Laravel 11 ke atas
- Import data wilayah Indonesia dari file JSON
- Relasi internal berbasis
id(bukan hanya kode) - Siap dipakai langsung oleh developer
Fitur
- ✅ Data lengkap: Provinsi, Kabupaten/Kota, Kecamatan, Desa
- ✅ Relasi internal (
province_id,regency_id,district_id) - ✅ Tetap menyimpan
coderesmi wilayah Indonesia - ✅ Eloquent Model siap pakai
- ✅ Artisan command untuk install & import data
- ✅ Install Data sesuai kebutuhan : provinsi, kota/kabupaten, kecamatan, kelurahan
- ✅ Bisa digunakan untuk Web & Mobile API
Instalasi
Install package via Composer:
composer require edi-prasetyo/indonesia-location
Package ini mendukung auto-discovery, tidak perlu menambahkan Service Provider secara manual.
Import Data Wilayah Indonesia
Jalankan command berikut:
php artisan indonesia-location:install
- Publish file migration sesuai kebutuhan
- Menjalankan migration
- Mengimpor data wilayah Indonesia
Partial Install (Opsional)
Kamu bisa menginstall data berdasarkan level wilayah:
# Hanya Provinsi php artisan indonesia-location:install --only=provinces # Provinsi + Kabupaten/Kota php artisan indonesia-location:install --only=regencies # Sampai Kecamatan php artisan indonesia-location:install --only=districts # Full (default: sampai Desa) php artisan indonesia-location:install --only=villages
Fresh Install
Untuk menghapus semua data dan install ulang:
php artisan indonesia-location:install --fresh
Atau kombinasi dengan level tertentu:
php artisan indonesia-location:install --only=villages --fresh
Struktur Database
provinces
| column | type |
|---|---|
| id | bigint |
| code | string |
| name | string |
| latitude | decimal |
| longitude | decimal |
regencies
| column | type |
|---|---|
| id | bigint |
| province_id | bigint (FK) |
| code | string |
| province_code | string |
| name | string |
| latitude | decimal |
| longitude | decimal |
districts
| column | type |
|---|---|
| id | bigint |
| province_id | bigint (FK) |
| regency_id | bigint (FK) |
| code | string |
| province_code | string |
| regency_code | string |
| name | string |
| latitude | decimal |
| longitude | decimal |
villages
| column | type |
|---|---|
| id | bigint |
| province_id | bigint (FK) |
| regency_id | bigint (FK) |
| district_id | bigint (FK) |
| code | string |
| province_code | string |
| regency_code | string |
| district_code | string |
| name | string |
| postal_code | string |
| latitude | decimal |
| longitude | decimal |
📘 Penggunaan Model
- use EdiPrasetyo\IndonesiaLocation\Models\Province;
- use EdiPrasetyo\IndonesiaLocation\Models\Regency;
- use EdiPrasetyo\IndonesiaLocation\Models\District;
- use EdiPrasetyo\IndonesiaLocation\Models\Village;
Ambil semua provinsi
use EdiPrasetyo\IndonesiaLocation\Models\Province; $provinces = Province::all();
Dengan relasi
$provinces = Province::with('regencies.districts.villages')->get();
Contoh pencarian
$aceh = Province::where('code', '11')->first(); $kabupaten = $aceh->regencies;
🔗 Relasi Eloquent
- Province → hasMany → Regencies
- Regency → hasMany → Districts
- District → hasMany → Villages
Semua relasi menggunakan foreign key berbasis ID untuk performa optimal.
Kebutuhan Sistem
- PHP 8.2+
- Laravel 11 atau lebih baru
- Database MySQL / PostgreSQL / SQLite