laravolt / indonesia
Package Laravel yang berisi data Provinsi, Kabupaten/Kota, Kecamatan, dan Keluarahan/Desa di seluruh Indonesia.
Requires
- php: ^8.3
- illuminate/support: ^12.68|^13.29
Requires (Dev)
- orchestra/testbench: ^10.0|^11.0
- php-coveralls/php-coveralls: ^2.9
- phpunit/phpunit: ^12.5|^13.4
Suggests
- laravolt/suitable: Required if you want to access editor panel
- spatie/geocoder: Synchronize latitude longitude data directly using Google's Geocoding Service
Provides
None
Conflicts
None
Replaces
None
- dev-master / 1.0.x-dev
- v0.45
- v0.44
- v0.43
- v0.42
- v0.41
- v0.40
- v0.39
- v0.38
- v0.37
- v0.36
- v0.35
- v0.34
- v0.33
- v0.32
- v0.31
- v0.30
- v0.29
- v0.28
- v0.27
- v0.26
- v0.25
- v0.24
- v0.23
- v0.22
- v0.21
- v0.20
- v0.19
- v0.18
- v0.17
- v0.16
- v0.15
- v0.14
- v0.13
- v0.12
- v0.11
- v0.10
- v0.9
- v0.8
- v0.7
- v0.6
- v0.5
- v0.4
- v0.3
- v0.2
- v0.1
- dev-ci/least-privilege-permissions
- dev-docs/security-policy
- dev-ci/dependabot-cooldown
- dev-fix/region-names-bps-verified
- dev-chore/dependabot-config
- dev-chore/framework-floor-cve-2026-114509
- dev-chore/deps-php83
- dev-copilot/add-multiple-database-connection
This package is auto-updated.
Last update: 2026-11-01 13:25:13 UTC
README
LARAVOLT INDONESIA
Package Laravel berisi data provinsi, kabupaten/kota, kecamatan, dan desa/kelurahan di seluruh Indonesia, lengkap dengan model Eloquent, seeder, dan facade untuk mengambil datanya.
Sumber data
Kode dan nama wilayah mengikuti Kepmendagri No. 300.2.2-2138 Tahun 2025 tentang Pemberian dan Pemutakhiran Kode, Data Wilayah Administrasi Pemerintahan, dan Pulau: 38 provinsi, 514 kabupaten/kota, 7.285 kecamatan, dan 83.762 desa/kelurahan. Perubahannya, Kepmendagri No. 300.2.2-2430 Tahun 2025, hanya menyangkut data pulau. Nama diperiksa silang dengan cahyadsn/wilayah (MIT). Versi awal paket ini memakai data edwardsamuel/Wilayah-Administratif-Indonesia.
Kebutuhan
- PHP 8.3 atau lebih baru
- Laravel 12.68+ atau 13.29+
Instalasi
composer require laravolt/indonesia
Service provider dan facade Indonesia terdaftar otomatis.
Konfigurasi (opsional)
php artisan vendor:publish --provider="Laravolt\Indonesia\ServiceProvider" --tag=config
Perintah ini membuat config/laravolt/indonesia.php. Semua nilai dibaca dari laravolt.indonesia.*, dan sebagian bisa diatur lewat .env:
| Kunci | .env |
Bawaan | Keterangan |
|---|---|---|---|
table_prefix |
indonesia_ |
Prefix nama tabel | |
database.connection |
INDONESIA_DB_CONNECTION |
koneksi bawaan aplikasi | Simpan data wilayah di database terpisah |
cache.store |
INDONESIA_CACHE_STORE |
cache store bawaan aplikasi | Store untuk hasil query |
cache.ttl |
INDONESIA_CACHE_TTL |
3600 |
Lama cache, dalam detik |
cache.prefix |
INDONESIA_CACHE_PREFIX |
indonesia_service |
Prefix kunci cache |
route.enabled |
false |
Aktifkan halaman pengelolaan data wilayah | |
menu.enabled |
false |
Tampilkan menu-nya di sidebar Laravolt |
Bila memakai koneksi terpisah, definisikan dulu koneksinya di config/database.php. Model, migration, dan seeder semuanya memakai koneksi tersebut.
Migration
php artisan vendor:publish --provider="Laravolt\Indonesia\ServiceProvider" --tag=migrations
php artisan migrate
Mengisi data wilayah
php artisan laravolt:indonesia:seed
Seeder aman dijalankan ulang. Baris baru akan ditambahkan, dan nama wilayah yang sudah ada diperbarui sesuai data terbaru. id dan kolom meta (koordinat) tidak diubah.
Untuk menjalankannya dari DatabaseSeeder:
use Laravolt\Indonesia\Seeds\CitiesSeeder; use Laravolt\Indonesia\Seeds\DistrictsSeeder; use Laravolt\Indonesia\Seeds\ProvincesSeeder; use Laravolt\Indonesia\Seeds\VillagesSeeder; public function run(): void { $this->call([ ProvincesSeeder::class, CitiesSeeder::class, DistrictsSeeder::class, VillagesSeeder::class, ]); }
Penggunaan
use Laravolt\Indonesia\Facade as Indonesia; // atau alias global \Indonesia Indonesia::allProvinces(); Indonesia::paginateProvinces($numRows = 15); Indonesia::allCities(); Indonesia::paginateCities($numRows = 15); Indonesia::allDistricts(); Indonesia::paginateDistricts($numRows = 15); Indonesia::allVillages(); Indonesia::paginateVillages($numRows = 15);
Mencari satu wilayah beserta relasinya
Indonesia::findProvince($provinceId, $with = null); // $with: ['cities', 'districts', 'villages', 'cities.districts', 'cities.districts.villages', 'districts.villages'] Indonesia::findCity($cityId, $with = null); // $with: ['province', 'districts', 'villages', 'districts.villages'] Indonesia::findDistrict($districtId, $with = null); // $with: ['province', 'city', 'city.province', 'villages'] Indonesia::findVillage($villageId, $with = null); // $with: ['province', 'city', 'district', 'district.city', 'district.city.province']
Contoh:
$aceh = Indonesia::findProvince(11, ['cities']); $aceh->name; // "ACEH" $aceh->cities->count(); // 23
Pencarian
Indonesia::search('jakarta')->all(); // provinsi, kota, kecamatan, dan desa sekaligus Indonesia::search('jakarta')->allProvinces(); Indonesia::search('jakarta')->paginateProvinces(); Indonesia::search('jakarta')->allCities(); Indonesia::search('jakarta')->paginateCities(); Indonesia::search('jakarta')->allDistricts(); Indonesia::search('jakarta')->paginateDistricts(); Indonesia::search('jakarta')->allVillages(); Indonesia::search('jakarta')->paginateVillages();
Cache
Hasil all*(), find*(), dan search() disimpan di cache selama cache.ttl. Yang disimpan berupa array biasa, lalu dibangun ulang menjadi model saat dibaca, sehingga aman untuk Laravel 13 (cache.serializable_classes = false) dengan store apa pun. Hasil paginate*() tidak di-cache.
Indonesia::clearCache(); // hapus semua cache paket ini Indonesia::clearCacheFor('find_province', ['id' => 11, 'with' => ['cities']]);
clearCache() pada store selain Redis mengosongkan seluruh store tersebut. Gunakan store terpisah (INDONESIA_CACHE_STORE) bila itu tidak diinginkan.
Testing
composer install vendor/bin/phpunit
Lisensi
MIT