発端と問題意識
今まで幾度となく、areasテーブルだとかprefecturesテーブルだとかつくってきました。
毎回バカみたいにseederクラスを作ってました。
...この時間って超無駄じゃなイカ?
...余計な機能なんていらないからmigrationとseedだけライブラリにまとめとけばいいんじゃなイカ?
...そして重い腰が偶然にも上がってしましたとさ。
方針
migrationとseedだけあればいいかな?(適当)
一応、最低限のModelくらいはつくっとくか(良心)
コードとかデータとか概要
データは日本郵便から引っ張りました。
物理名 | 論理名 | 備考 |
---|---|---|
areas | 地域 | 8地域 |
prefectures | 都道府県 | 47都道府県 |
cities | 市区町村 | 1,896市区町村 |
towns | 町域 | 116,787町域。郵便番号データあり。 |
導入方法
インストール
作ったもののテストなどほぼしてませんので、自己責任でお願いします。(無責任)
composer require new-japan-orders/japanese-address
migrationとseederを展開
php artisan vendor:publish --provider "NewJapanOrders\JapaneseAddress\ServiceProvider"
composer dump-autoload
以下のファイルが展開されます。
base_path
└ database
├ migrations
│ ├ YYYY_mm_dd_HHiiss_create_areas_table.php
│ ├ YYYY_mm_dd_HHiiss_create_prefectures_table.php
│ ├ YYYY_mm_dd_HHiiss_create_cities_table.php
│ └ YYYY_mm_dd_HHiiss_create_towns_table.php
└ seeds
├ AreaSeeder.php
├ PrefectureSeeder.php
├ CitySeeder.php
└ TownSeeder.php
展開したファイルを実行
php artisan migrate
php artisan db:seed --class AreaSeeder
php artisan db:seed --class PrefectureSeeder
php artisan db:seed --class CitySeeder
php artisan db:seed --class TownSeeder
※ TownSeederの実行はそこそこ時間がかかります。
使い方
Modelクラスがあるので以下のように使ってください。
必要に応じて継承するなりして使えばよいかと思っております。
use NewJapanOrders\JapaneseAddress\Area;
use NewJapanOrders\JapaneseAddress\Prefecture;
use NewJapanOrders\JapaneseAddress\City;
use NewJapanOrders\JapaneseAddress\Town;
$areas = Area::all();
$prefecture = Prefecture::find(3);
$area = $prefecture->area()->first();
$cities = $prefecture->cities()->get();
$city = $prefecture->cities()->first();
$towns = $city->towns()->get();
$town = $city->towns->first();
今後の課題
- テストコードを書く。
- ちゃんとテストする。