A Laravel package for Turkey's provinces, districts, quarters (subdistricts), neighborhoods, and postal codes. Easily import, query, and keep up-to-date address data from https://www.postakodu.web.tr/
composer require madkhix/tr-addressphp artisan vendor:publish --provider="TrAddress\TrAddressServiceProvider" --tag="migrations"
php artisan migrate
php artisan vendor:publish --provider="TrAddress\TrAddressServiceProvider" --tag="seeders"
php artisan vendor:publish --provider="TrAddress\TrAddressServiceProvider" --tag="traddress-config"After running the Python scraper, copy the generated
tr-address-data.jsonfile to your Laravel project root (where theartisanfile is located). You can also use the following artisan command to copy it automatically:php artisan traddress:publish-jsonYou can change the JSON data file path in
config/traddress.phpif needed.
The JSON data must have the following structure:
[
{
"name": "ADANA",
"districts": [
{
"name": "ALADAĞ",
"quarters": [
{
"name": "KARSANTI",
"neighborhoods": [
{ "name": "MANSURLU MAH.", "postcode": "01720" }
]
}
]
}
]
}
]citieshave manydistrictsdistrictshave manyquarters(subdistricts)quartershave manyneighborhoods- Each
neighborhoodhas apostcode
Each table has its own migration file:
citiesdistrictssubdistricts(quarters)neighborhoodspostcodes
You can run all migrations at once:
php artisan migrateOr, to run a specific migration file (advanced usage):
php artisan migrate --path=src/database/migrations/2024_01_03_000000_create_subdistricts_table.phpEach table has its own seeder:
CitySeederDistrictSeederSubdistrictSeeder(seeds all quarters)NeighborhoodSeeder(seeds all neighborhoods and links to subdistricts)PostcodeSeederTrAddressSeeder(runs all in order)
Seed all data:
php artisan db:seed --class=Database\Seeders\TrAddressSeederNote:
- Run
SubdistrictSeederbeforeNeighborhoodSeederif you seed them separately.NeighborhoodSeederwill not create subdistricts, only link to existing ones.
After generating or updating your tr-address-data.json file, import it with:
php artisan traddress:import tr-address-data.jsonuse TrAddress\Models\City;
use TrAddress\Models\District;
use TrAddress\Models\Subdistrict;
use TrAddress\Models\Neighborhood;
use TrAddress\Models\Postcode;
$cities = City::all();
$districts = $cities[0]->districts;
$quarters = $districts[0]->subdistricts; // quarters
$neighborhoods = $quarters[0]->neighborhoods;
$postcode = $neighborhoods[0]->postcodes->first()->code;This package does not include the Python data fetcher script by default. To update the address data from the official PTT source, use the separate Python script available at:
https://github.com/madkhix/tr-address-fetcher
Usage:
- Clone or download the script from the repository above.
- Run the script in your terminal:
python fetch_tr_address_data.py
- The script will generate a
tr-address-data.jsonfile. - Copy this file to your Laravel project root (where
artisanis located). - Import the data using the package's artisan command:
php artisan traddress:import tr-address-data.json
This approach keeps the PHP package clean and dependency-free, while still allowing advanced users to update the address data as needed.
MIT