A Laravel package for importing and managing foreign countries data from ISTAT (Italian National Institute of Statistics).
- ๐ Import continents, geographical areas, and foreign countries from ISTAT
- ๐ Eloquent models with hierarchical relationships
- โก Artisan command for easy data import
- ๐ง Fully configurable via configuration file
- ๐ UUID primary keys and soft deletes support
- ๐ท๏ธ Multiple coding standards support (ISTAT, ISO, MIN, AT)
- PHP 8.3+
- Laravel 12.0+
- league/csv 9.0+
- guzzlehttp/guzzle 7.0+
composer require plin-code/laravel-istat-foreign-countries- Install the package:
composer require plin-code/laravel-istat-foreign-countries- Publish the configuration:
php artisan vendor:publish --provider="PlinCode\IstatForeignCountries\IstatForeignCountriesServiceProvider"- Run migrations:
php artisan migrate- Import the data:
php artisan foreign-countries:importThat's it! You now have all foreign countries data in your database.
Publish the configuration file:
php artisan vendor:publish --provider="PlinCode\IstatForeignCountries\IstatForeignCountriesServiceProvider"To import all foreign countries data from ISTAT:
php artisan foreign-countries:importThe package provides three Eloquent models:
use PlinCode\IstatForeignCountries\Models\ForeignCountries\Continent;
$continent = Continent::where('name', 'Europa')->first();
$areas = $continent->areas;
$countries = $continent->countries;use PlinCode\IstatForeignCountries\Models\ForeignCountries\Area;
$area = Area::where('name', 'Unione europea')->first();
$countries = $area->countries;
$continent = $area->continent;use PlinCode\IstatForeignCountries\Models\ForeignCountries\Country;
// Find by ISO alpha2
$country = Country::where('iso_alpha2', 'FR')->first();
// Find by ISO alpha3
$country = Country::where('iso_alpha3', 'FRA')->first();
// Find by ISTAT code
$country = Country::where('istat_code', '215')->first();
// Access relationships
$continent = $country->continent;
$area = $country->area;
// Check type
if ($country->isState()) {
echo "This is a state";
}
if ($country->isTerritory()) {
echo "This is a territory";
$parent = $country->parentCountry;
}
// Get territories of a country
$france = Country::where('iso_alpha2', 'FR')->first();
$territories = $france->territories;use PlinCode\IstatForeignCountries\Facades\IstatForeignCountries;
// Import data programmatically
$count = IstatForeignCountries::import();Each country includes multiple international coding standards:
- ISTAT Code: Italian statistical code
- ISO Alpha-2: Two-letter country code (e.g., "FR")
- ISO Alpha-3: Three-letter country code (e.g., "FRA")
- AT Code: Italian territorial code
id(UUID, primary key)name(string)istat_code(string, unique)created_at,updated_at,deleted_at
id(UUID, primary key)continent_id(UUID, foreign key)name(string)istat_code(string, unique)created_at,updated_at,deleted_at
id(UUID, primary key)continent_id(UUID, foreign key)area_id(UUID, foreign key)parent_country_id(UUID, foreign key, nullable)type(string: 'S' for State, 'T' for Territory)name(string: Italian name)istat_code(string, unique)iso_alpha2(string, 2 chars)iso_alpha3(string, 3 chars)at_code(string)created_at,updated_at,deleted_at
ContinentโhasManyโAreaContinentโhasManyโCountryAreaโbelongsToโContinentAreaโhasManyโCountryCountryโbelongsToโContinentCountryโbelongsToโAreaCountryโbelongsToโCountry(parent country, for territories)CountryโhasManyโCountry(territories)
The config/istat-foreign-countries.php file allows you to customize:
- Database connection: Specify a custom database connection
- Table names: Customize the database table names
- Model classes: Use your own model classes by extending the base ones
- CSV URL: Change the ISTAT data source URL
- Temporary file name: Customize the cache file name
return [
'database_connection' => null,
'tables' => [
'continents' => 'continents',
'areas' => 'areas',
'countries' => 'countries',
],
'models' => [
'continent' => \App\Models\Continent::class,
'area' => \App\Models\Area::class,
'country' => \App\Models\Country::class,
],
'import' => [
'csv_url' => 'https://www.istat.it/storage/codici-unita-amministrative/Elenco-codici-e-denominazioni-unita-territoriali-estere.csv',
'temp_filename' => 'istat_foreign_countries.csv',
],
];Run the test suite:
composer testThe package includes:
- โ Unit tests for models and relationships
- โ Feature tests for the import service
- โ Mocked HTTP requests (no external dependencies)
- โ PHPStan static analysis (Level 5)
- โ Pest PHP testing framework
- โ Architecture tests
composer analysecomposer format- Fork the project
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Data source: ISTAT - Italian National Institute of Statistics
The MIT License (MIT). Please see License File for more information.