Laravel RajaOngkir: Membuat Migration dan Seeder
RajaOngkir adalah salah satu platform yang menyediakan layanan informasi logistik, termasuk data provinsi dan kota di Indonesia. Dalam pengembangan aplikasi berbasis Laravel, seringkali kita memerlukan data tersebut untuk mempermudah pengguna dalam memilih lokasi pengiriman atau penerimaan barang.
Pada artikel ini, kita akan membahas cara menyimpan data provinsi dan kota dari RajaOngkir ke dalam database menggunakan Laravel. Proses ini memungkinkan kita untuk memiliki data tersebut secara lokal dan dapat diakses dengan mudah dari aplikasi yang sedang kita kembangkan.
Persiapan
Sebelum memulai, pastikan teman-tema memiliki beberapa hal berikut:
- Akun RajaOngkir: Daftarkan diri dan dapatkan API key dari RajaOngkir melalui situs resmi mereka (https://rajaongkir.com/).
- Instalasi Laravel: Pastikan teman-teman memiliki Laravel terinstal di sistem. Jika belum, Kalian dapat mengikuti panduan instalasi di situs resmi Laravel (https://laravel.com/docs/).
FYI. Di artikel ini, saya akan melanjutkan artikel sebelumnnya yang telah membahas bagimana cara register akun dan mendapatkan API Key RajaOngkir. Jika teman-teman belum mengikutinya, saya sarankan untuk mengikuti series Laravel RajaOngkir.
Table of Contents
Step 1: Generate Model, Migration & Seeder
Oke, kita akan membuat tabel-tabel yang diperlukan untuk menyimpan data provinsi dan kota. Laravel menyediakan fitur migration untuk mengelola struktur database dan seeder untuk insert data ke tabel database. Buka terminal atau command prompt, dan jalankan perintah berikut:
php artisan make:model Province -ms
php artisan make:model City -ms Langkah di atas akan membuat 6 file yang terdiri dari; 2 file model di dalam direktori app/models, 2 file migration di dalam direktori database/migrations dan 2 file seeder di dalam direktori database/seeders.
Step 2: Setup Migration
Berikutnya, mari kita lakukan konfigurasi pada 2 file migration yang telah kita generate. File migration yang pertama adalah file migration province. Silakan buka file tersebut di database/migrations/{timestamp}_create_provinces_table.php, kemudian edit method up menjadi seperti di bawah ini. Kita hanya memerlukan column name di tabel provinces.
public function up(): void
{
Schema::create('provinces', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
} Selanjutnya buka file database/migrations/{timestamp}_create_cities_table.php, dan edit method up menjadi seperti di bawah ini. Di tabel cities, kita akan menambahkan column; province_id, type, name dan postal_code.
public function up(): void
{
Schema::create('cities', function (Blueprint $table) {
$table->id();
$table->foreignId('province_id');
$table->string('type');
$table->string('name');
$table->string('postal_code');
$table->timestamps();
});
} Step 3: Setup Seeder
Selesai di migration, sekarang beralih ke file seeder. Seeder pertama yang akan kita setup adalah ProvinceSeeder. Silakan buka file database/seeders/ProvinceSeeder.php dan edit menjadi seperti di bawah ini.
<?php
namespace Database\Seeders;
use App\Models\Province;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Http;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
class ProvinceSeeder extends Seeder
{
public function run(): void
{
$provinces = Http::withOptions(['verify' => false,])->withHeaders([
'key' => env('RAJAONGKIR_API_KEY')
])->get('https://api.rajaongkir.com/starter/province')->json()['rajaongkir']['results'];
foreach ($provinces as $province) {
Province::create([
'name' => $province['province'],
'created_at' => now(),
'updated_at' => now(),
]);
}
}
} Seeder yang kedua adalah CitySeeder. Silakan buka file seeder tersebut di database/seeders/ProvinceSeeder.php dan update menjadi seperti di bawah ini.
<?php
namespace Database\Seeders;
use App\Models\City;
use App\Models\Province;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Http;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
class CitySeeder extends Seeder
{
public function run(): void
{
$provinces = Province::all();
foreach ($provinces as $province) {
$cities = Http::withOptions(['verify' => false,])->withHeaders([
'key' => env('RAJAONGKIR_API_KEY')
])->get('https://api.rajaongkir.com/starter/city?province=' . $province->id)->json()['rajaongkir']['results'];
$insert_city = [];
foreach ($cities as $city) {
$data = [
'province_id' => $province->id,
'type' => $city['type'],
'name' => $city['type'] . ' ' . $city['city_name'],
'postal_code' => $city['postal_code'],
'created_at' => now(),
'updated_at' => now(),
];
$insert_city[] = $data;
}
$insert_city = collect($insert_city);
$city_chunks = $insert_city->chunk(100);
foreach ($city_chunks as $chunk) {
City::insert($chunk->toArray());
}
}
}
} Selanjutnya, kita panggil kedua seeder tersebut pada class DatabaseSeeder seperti di bawah ini:
public function run(): void
{
$this->call([
ProvinceSeeder::class,
CitySeeder::class,
]);
} Step 4: Setup Model
Sebelum kita menjalankan migrate & seed, mari kita setup kedua model Province dan City terlebih dahulu dengan menambahkan relasi antara kedua model tersebut. Model yang pertama ada Province. Silakan buka file model Province dan tambahkan relasi hasMany dengan model City seperti di bawah ini.
use Illuminate\Database\Eloquent\Relations\HasMany;
....
....
protected $guarded = [];
public function cities(): HasMany
{
return $this->hasMany(City::class);
} Kemudian, buka file model City dan tambahkan relasi belongsTo dengan model Province seperti di bawah ini.
use Illuminate\Database\Eloquent\Relations\BelongsTo;
....
....
protected $guarded = [];
public function province(): BelongsTo
{
return $this->belongsTo(Province::class);
} Step 5: Migrate & Seed
Wokey, jika migration, model dan seeder telah selesai kita konfigurasi, sekarang kita bisa menjalankan perintah php artisan migrate --seed untuk memigrasi file-file migration ke database dan menjalankan perintah seeder.
php artisan migrate --seed Setelah proses migrate & seed selesai, sekarang kalau kita cek pada tabel provinces, maka akan berisi data provinsi-provinsi di Indonesia seperti gambar di bawah ini.

Dan di tabel cities akan terisi data kota-kota di Indonesia seperti gambar di bawah ini.

Dalam artikel ini, kita telah mempelajari bagaimana menyimpan data provinsi dan kota dari RajaOngkir ke dalam database menggunakan Laravel. Proses ini akan memungkinkan kita untuk memiliki data lokasi secara lokal dan mempermudah user dalam memilih lokasi dengan mudah dari aplikasi yang sedang kita kembangkan. Semoga artikel ini bermanfaat dalam pengembangan proyek Laravel teman-teman yang menggunakan layanan logistik dari RajaOngkir. Selamat mencoba dan see you 👋
Source Code: Laravel Raja Ongkir
Last updated on June 04, 2026