jszdavid/laravel-world
Laravel package providing countries, states, and cities data (based on nnjeim/world) with migrations, seeder, configurable table names and route prefix, optional country filters, and a World facade/API endpoints with optional query caching.
A Laravel package which provides a list of the countries, states and cities based on nnjeim/world.
composer require jszd2022/laravel-world
php artisan vendor:publish --provider="JSzD\World\WorldServiceProvider"
php artisan migrate
php -d memory_limit=512M artisan db:seed --class=WorldSeeder
The package comes with a default configuration file. You can customize the table names, API route prefix, and filter which countries to seed.
// config/laravel-world.php
return [
'countries' => [
'only' => null, // Array of ISO2 codes to include (e.g., ['US', 'GB'])
'except' => null, // Array of ISO2 codes to exclude
],
'routes' => [
'enabled' => true,
'prefix' => 'api',
],
'migrations' => [
'countries' => [
'table_name' => 'laravel-world-countries',
],
'states' => [
'table_name' => 'laravel-world-states',
],
'cities' => [
'table_name' => 'laravel-world-cities',
],
],
'cache_ttl' => 604800, // 1 week
];
You can use the World facade to retrieve countries, states, and cities.
use JSzD\World\Facades\World;
// Get all countries (default fields: id, name, iso2)
$countries = World::countries([])->data;
// Get countries with specific fields and search
$countries = World::countries([
'fields' => 'id,name,iso2,phone_code',
'search' => 'United',
])->data;
// Filter countries
$countries = World::countries([
'filters' => [
'iso2' => 'US'
]
])->data;
// Get states for a country
$states = World::states([
'filters' => [
'country_code' => 'US'
]
])->data;
// Get cities for a state
$cities = World::cities([
'filters' => [
'state_id' => 123
]
])->data;
// Get cities for a country
$cities = World::cities([
'filters' => [
'country_code' => 'US'
]
])->data;
You can chain the withCaching() method to cache the result of the query.
$countries = World::withCaching()->countries([])->data;
If enabled in the configuration, the following API endpoints are available:
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/countries |
List all countries |
GET |
/api/countries/{country_code}/states |
List states for a country |
GET |
/api/countries/{country_code}/cities |
List cities for a country |
All endpoints support the following query parameters:
fields: Comma-separated string of fields to return (e.g., id,name).filters[field]: Filter by a specific field.search: Search by name (using LIKE %search%).Example:
GET /api/countries?fields=name,phone_code&search=Hung
The package provides the following Eloquent models:
JSzD\World\Models\CountryJSzD\World\Models\StateJSzD\World\Models\CityYou can use these models to define relationships in your own models:
public function country()
{
return $this->belongsTo(\JSzD\World\Models\Country::class);
}
The MIT License (MIT). Please see License File for more information.
How can I help you explore Laravel packages today?