public function syncRegions($geonameId, $parent = null, $level = 1) { if ($level > 2) { return; } $geonames = $this->request('childrenJSON', ['geonameId' => $geonameId]); if (empty($geonames['geonames'])) { return; } foreach ($geonames['geonames'] as $geoname) { $data = ['name' => $geoname['name'], 'short' => $geoname['fcode'] == 'ADM1' ? $geoname['adminCode1'] : '', 'parent_id' => $parent ? $parent->id : 0]; $region = Region::updateOrCreate($data); $this->info("Inserted {$region->name}"); $this->syncRegions($geoname['geonameId'], $region, $level + 1); } }