BrazilCitiesSeeder.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace Database\Seeders;
  3. use App\Models\City;
  4. use App\Models\State;
  5. use App\Models\Country;
  6. use GuzzleHttp\Client;
  7. use Illuminate\Database\Seeder;
  8. class BrazilCitiesSeeder extends Seeder
  9. {
  10. public function run()
  11. {
  12. try {
  13. $brasil = Country::firstOrNew(
  14. [
  15. 'name' => 'Brasil',
  16. 'code' => 'BR'
  17. ]
  18. );
  19. $brasil->save();
  20. $client_estados = new Client();
  21. $url_estados = 'https://servicodados.ibge.gov.br/api/v1/localidades/estados';
  22. $response_estados = $client_estados->request('GET', $url_estados);
  23. $estados = json_decode($response_estados->getBody());
  24. foreach ($estados as $estado) {
  25. echo "Criando estado {$estado->nome}\n";
  26. $new_estado = State::firstOrNew(
  27. [
  28. 'name' => $estado->nome,
  29. 'code' => $estado->sigla,
  30. 'country_id' => $brasil->id
  31. ]
  32. );
  33. $new_estado->save();
  34. $client_cidades = new Client();
  35. $url_cidades = "https://servicodados.ibge.gov.br/api/v1/localidades/estados/$estado->id/municipios";
  36. $response_cidades = $client_cidades->request('GET', $url_cidades);
  37. $cidades = json_decode($response_cidades->getBody());
  38. $total_cidades = 0;
  39. foreach ($cidades as $cidade) {
  40. $new_cidade = City::firstOrNew(
  41. [
  42. 'name' => $cidade->nome,
  43. 'state_id' => $new_estado->id,
  44. 'country_id' => $brasil->id
  45. ]
  46. );
  47. $new_cidade->save();
  48. $total_cidades++;
  49. }
  50. echo " -> Total de cidades: {$total_cidades}\n";
  51. }
  52. } catch (\Throwable $th) {
  53. throw $th;
  54. return false;
  55. }
  56. }
  57. }