Sekarang kita akan lanjutkan membuat seeder untuk data provinsi dan kota dari RajaOngkir. Tujuannya data provinsi dan kota disimpan di dalam database adalah agar kita tidak selalu request ke API RajaOngkir. Karena kita akan melakukan request ke API RajaOngkir untuk mendapatkan data informasi layanan kurir beserta harganya saja.
Sekarang kita akan membuat seeder yang berfungsi untuk menyimpan data provinsi yang diambil dari API RajaOgnkir ke di database.
Silahkan teman-teman jalankan perintah berikut ini di dalam terminal/CMD dan pastikan sudah berada di dalam project Laravel-nya.
go
php artisan make:seeder ProvincesTableSeeder
Jika perintah di atas berhasil di jalankan, maka kita akan mendapatkan 1 file seeder baru dengan nama ProvincesTableSeeder.php yang berada di dalam folder database/seeders. Silahkan buka file tersebut dan ubah kode-nya menjadi seperti berikut ini :
php
<?php
namespace Database\Seeders;
use App\Models\Province;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Http;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
class ProvincesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
//Fetch Rest API
$response = Http::withHeaders([
//api key rajaongkir
'key' => config('rajaongkir.api_key'),
])->get('https://api.rajaongkir.com/starter/province');
//loop data from Rest API
foreach($response['rajaongkir']['results'] as $province) {
//insert ke table "provinces"
Province::create([
'id' => $province['province_id'],
'name' => $province['province']
]);
}
}
}
Di atas, pertama kita melakukan import Model Province, karena kita akan menggunakan model ini untuk melakukan insert data.
perl
use App\Models\Province;
Setelah itu, kita juga import Facades Http Client dari Laravel, atau biasa disebut dengan Guzzle, ini akan digunakan untuk melakukan fetching ke dalam sebuah Rest API.
perl
use Illuminate\Support\Facades\Http;
Dan di dalam method run kita menambahkan beberapa kode, kurang lebih seperti berikut ini :
php
//Fetch Rest API
$response = Http::withHeaders([
//api key rajaongkir
'key' => config('rajaongkir.api_key'),
])->get('https://api.rajaongkir.com/starter/province');
Di atas kita melakukan Http Request ke dalam sebuah endpoint https://api.rajaongkir.com/starter/province dan method yang digunakan adalah GET dan kita juga menyertakan API KEY di dalam headers.
Setelah data di dapatkan, kita lakukan perulangan menggunakan foreach dan di dalamnya kita melakukan insert data menggunakan Model.
php
//loop data from Rest API
foreach($response['rajaongkir']['results'] as $province) {
//insert ke table "provinces"
Province::create([
'id' => $province['province_id'],
'name' => $province['province']
]);
}