【Laravel】都道府県・市町村マスタをSeeder使って作ってみた
都道府県マスタと市区町村マスタどっかに落ちてないかな~とググってみましたが、 市区町村まで作成している物が見当たらなかったので、作ってみました! ※使うかどうかの判断は、自己責任でお願いします!※ これOUTじゃね?と思ったらコメントお願いします!さっそく現物
都道府県マスタのテーブル構造
Schema::create('prefectures', function (Blueprint $table) {
$table->string('id')->primary();
$table->string('name')->default('');
$table->timestamps();
});
市町村マスタのテーブル構造
Schema::create('cities', function (Blueprint $table) {
$table->string('id')->primary();
$table->bigInteger('prefecture_id');
$table->string('name')->default('');
$table->timestamps();
});
seeder
public function run()
{
//
$prefectures = [
['id' => '01', 'name' => '北海道'],
['id' => '02', 'name' => '青森県'],
['id' => '03', 'name' => '岩手県'],
['id' => '04', 'name' => '宮城県'],
['id' => '05', 'name' => '秋田県'],
['id' => '06', 'name' => '山形県'],
['id' => '07', 'name' => '福島県'],
['id' => '08', 'name' => '茨城県'],
['id' => '09', 'name' => '栃木県'],
['id' => '10', 'name' => '群馬県'],
['id' => '11', 'name' => '埼玉県'],
['id' => '12', 'name' => '千葉県'],
['id' => '13', 'name' => '東京都'],
['id' => '14', 'name' => '神奈川県'],
['id' => '15', 'name' => '新潟県'],
['id' => '16', 'name' => '富山県'],
['id' => '17', 'name' => '石川県'],
['id' => '18', 'name' => '福井県'],
['id' => '19', 'name' => '山梨県'],
['id' => '20', 'name' => '長野県'],
['id' => '21', 'name' => '岐阜県'],
['id' => '22', 'name' => '静岡県'],
['id' => '23', 'name' => '愛知県'],
['id' => '24', 'name' => '三重県'],
['id' => '25', 'name' => '滋賀県'],
['id' => '26', 'name' => '京都府'],
['id' => '27', 'name' => '大阪府'],
['id' => '28', 'name' => '兵庫県'],
['id' => '29', 'name' => '奈良県'],
['id' => '30', 'name' => '和歌山県'],
['id' => '31', 'name' => '鳥取県'],
['id' => '32', 'name' => '島根県'],
['id' => '33', 'name' => '岡山県'],
['id' => '34', 'name' => '広島県'],
['id' => '35', 'name' => '山口県'],
['id' => '36', 'name' => '徳島県'],
['id' => '37', 'name' => '香川県'],
['id' => '38', 'name' => '愛媛県'],
['id' => '39', 'name' => '高知県'],
['id' => '40', 'name' => '福岡県'],
['id' => '41', 'name' => '佐賀県'],
['id' => '42', 'name' => '長崎県'],
['id' => '43', 'name' => '熊本県'],
['id' => '44', 'name' => '大分県'],
['id' => '45', 'name' => '宮崎県'],
['id' => '46', 'name' => '鹿児島県'],
['id' => '47', 'name' => '沖縄県'],
];
Log::info('seeder start');
$url = 'https://www.land.mlit.go.jp/webland/api/CitySearch';
for ($i = 1; $i <= 47; $i++) {
$areaCode = str_pad($i, 2, '0', STR_PAD_LEFT);
$response = Http::get($url, [
'area' => $areaCode,
]);
Prefectures::create([
'id' => $areaCode,
'name' => $prefectures[array_search($areaCode, array_column($prefectures, 'id'))]['name']
]);
foreach ($response['data'] as $data) {
City::create([
'id' => $data['id'],
'prefecture_id' => $areaCode,
'name' => $data['name']
]);
}
}
Log::info('seeder end');
}
※1 各モデルクラスのコードは省略しています。(〇〇〇::create の〇〇〇の部分)
※2 Log::infoの内容は、storage>logs>laravel.logに書き込まれます。
ちょっとした説明
市区町村のデータは、下記APIをたたいて取得してきています。 https://www.land.mlit.go.jp/webland/api/CitySearch APIの仕様は、[こちら](https://www.land.mlit.go.jp/webland/api.html#todofukenlist)を参照。都道府県名については、残念ながら上記APIでは取得できないので、致し方なく直書きをしています。
返ってくるデータの内容は下記の通りです。
json
{"status":"OK","data":[{"id":"01100","name":"札幌市"},{"id":"01101","name":"中央区"},~
以上!