44
55use Illuminate \Database \Seeder ;
66use App \Models \Country ;
7+ use RuntimeException ;
78
89class CountrySeeder extends Seeder
910{
1011 public function run (): void
1112 {
12- $ countries = [
13+ $ countriesIso2 = [
1314 ['AF ' ,'Afghanistan ' ], ['AL ' ,'Albania ' ], ['DZ ' ,'Algeria ' ], ['AD ' ,'Andorra ' ], ['AO ' ,'Angola ' ],
1415 ['AG ' ,'Antigua and Barbuda ' ], ['AR ' ,'Argentina ' ], ['AM ' ,'Armenia ' ], ['AU ' ,'Australia ' ], ['AT ' ,'Austria ' ],
1516 ['AZ ' ,'Azerbaijan ' ], ['BS ' ,'Bahamas ' ], ['BH ' ,'Bahrain ' ], ['BD ' ,'Bangladesh ' ], ['BB ' ,'Barbados ' ],
@@ -52,7 +53,30 @@ public function run(): void
5253 ['VA ' ,'Holy See ' ], ['PS ' ,'State of Palestine ' ],
5354 ];
5455
55- $ regions = [
56+ $ iso2to3 = [
57+ 'AF ' =>'AFG ' ,'AL ' =>'ALB ' ,'DZ ' =>'DZA ' ,'AD ' =>'AND ' ,'AO ' =>'AGO ' ,'AG ' =>'ATG ' ,'AR ' =>'ARG ' ,'AM ' =>'ARM ' ,'AU ' =>'AUS ' ,'AT ' =>'AUT ' ,
58+ 'AZ ' =>'AZE ' ,'BS ' =>'BHS ' ,'BH ' =>'BHR ' ,'BD ' =>'BGD ' ,'BB ' =>'BRB ' ,'BY ' =>'BLR ' ,'BE ' =>'BEL ' ,'BZ ' =>'BLZ ' ,'BJ ' =>'BEN ' ,'BT ' =>'BTN ' ,
59+ 'BO ' =>'BOL ' ,'BA ' =>'BIH ' ,'BW ' =>'BWA ' ,'BR ' =>'BRA ' ,'BN ' =>'BRN ' ,'BG ' =>'BGR ' ,'BF ' =>'BFA ' ,'BI ' =>'BDI ' ,'CV ' =>'CPV ' ,'KH ' =>'KHM ' ,
60+ 'CM ' =>'CMR ' ,'CA ' =>'CAN ' ,'CF ' =>'CAF ' ,'TD ' =>'TCD ' ,'CL ' =>'CHL ' ,'CN ' =>'CHN ' ,'CO ' =>'COL ' ,'KM ' =>'COM ' ,'CG ' =>'COG ' ,'CD ' =>'COD ' ,
61+ 'CR ' =>'CRI ' ,'CI ' =>'CIV ' ,'HR ' =>'HRV ' ,'CU ' =>'CUB ' ,'CY ' =>'CYP ' ,'CZ ' =>'CZE ' ,'DK ' =>'DNK ' ,'DJ ' =>'DJI ' ,'DM ' =>'DMA ' ,'DO ' =>'DOM ' ,
62+ 'EC ' =>'ECU ' ,'EG ' =>'EGY ' ,'SV ' =>'SLV ' ,'GQ ' =>'GNQ ' ,'ER ' =>'ERI ' ,'EE ' =>'EST ' ,'SZ ' =>'SWZ ' ,'ET ' =>'ETH ' ,'FJ ' =>'FJI ' ,'FI ' =>'FIN ' ,
63+ 'FR ' =>'FRA ' ,'GA ' =>'GAB ' ,'GM ' =>'GMB ' ,'GE ' =>'GEO ' ,'DE ' =>'DEU ' ,'GH ' =>'GHA ' ,'GR ' =>'GRC ' ,'GD ' =>'GRD ' ,'GT ' =>'GTM ' ,'GN ' =>'GIN ' ,
64+ 'GW ' =>'GNB ' ,'GY ' =>'GUY ' ,'HT ' =>'HTI ' ,'HN ' =>'HND ' ,'HU ' =>'HUN ' ,'IS ' =>'ISL ' ,'IN ' =>'IND ' ,'ID ' =>'IDN ' ,'IR ' =>'IRN ' ,'IQ ' =>'IRQ ' ,
65+ 'IE ' =>'IRL ' ,'IL ' =>'ISR ' ,'IT ' =>'ITA ' ,'JM ' =>'JAM ' ,'JP ' =>'JPN ' ,'JO ' =>'JOR ' ,'KZ ' =>'KAZ ' ,'KE ' =>'KEN ' ,'KI ' =>'KIR ' ,'KP ' =>'PRK ' ,
66+ 'KR ' =>'KOR ' ,'KW ' =>'KWT ' ,'KG ' =>'KGZ ' ,'LA ' =>'LAO ' ,'LV ' =>'LVA ' ,'LB ' =>'LBN ' ,'LS ' =>'LSO ' ,'LR ' =>'LBR ' ,'LY ' =>'LBY ' ,'LI ' =>'LIE ' ,
67+ 'LT ' =>'LTU ' ,'LU ' =>'LUX ' ,'MG ' =>'MDG ' ,'MW ' =>'MWI ' ,'MY ' =>'MYS ' ,'MV ' =>'MDV ' ,'ML ' =>'MLI ' ,'MT ' =>'MLT ' ,'MH ' =>'MHL ' ,'MR ' =>'MRT ' ,
68+ 'MU ' =>'MUS ' ,'MX ' =>'MEX ' ,'FM ' =>'FSM ' ,'MD ' =>'MDA ' ,'MC ' =>'MCO ' ,'MN ' =>'MNG ' ,'ME ' =>'MNE ' ,'MA ' =>'MAR ' ,'MZ ' =>'MOZ ' ,'MM ' =>'MMR ' ,
69+ 'NA ' =>'NAM ' ,'NR ' =>'NRU ' ,'NP ' =>'NPL ' ,'NL ' =>'NLD ' ,'NZ ' =>'NZL ' ,'NI ' =>'NIC ' ,'NE ' =>'NER ' ,'NG ' =>'NGA ' ,'MK ' =>'MKD ' ,'NO ' =>'NOR ' ,
70+ 'OM ' =>'OMN ' ,'PK ' =>'PAK ' ,'PW ' =>'PLW ' ,'PA ' =>'PAN ' ,'PG ' =>'PNG ' ,'PY ' =>'PRY ' ,'PE ' =>'PER ' ,'PH ' =>'PHL ' ,'PL ' =>'POL ' ,'PT ' =>'PRT ' ,
71+ 'QA ' =>'QAT ' ,'RO ' =>'ROU ' ,'RU ' =>'RUS ' ,'RW ' =>'RWA ' ,'KN ' =>'KNA ' ,'LC ' =>'LCA ' ,'VC ' =>'VCT ' ,'WS ' =>'WSM ' ,'SM ' =>'SMR ' ,'ST ' =>'STP ' ,
72+ 'SA ' =>'SAU ' ,'SN ' =>'SEN ' ,'RS ' =>'SRB ' ,'SC ' =>'SYC ' ,'SL ' =>'SLE ' ,'SG ' =>'SGP ' ,'SK ' =>'SVK ' ,'SI ' =>'SVN ' ,'SB ' =>'SLB ' ,'SO ' =>'SOM ' ,
73+ 'ZA ' =>'ZAF ' ,'SS ' =>'SSD ' ,'ES ' =>'ESP ' ,'LK ' =>'LKA ' ,'SD ' =>'SDN ' ,'SR ' =>'SUR ' ,'SE ' =>'SWE ' ,'CH ' =>'CHE ' ,'SY ' =>'SYR ' ,'TJ ' =>'TJK ' ,
74+ 'TH ' =>'THA ' ,'TL ' =>'TLS ' ,'TG ' =>'TGO ' ,'TO ' =>'TON ' ,'TT ' =>'TTO ' ,'TN ' =>'TUN ' ,'TR ' =>'TUR ' ,'TM ' =>'TKM ' ,'TV ' =>'TUV ' ,'UG ' =>'UGA ' ,
75+ 'UA ' =>'UKR ' ,'AE ' =>'ARE ' ,'GB ' =>'GBR ' ,'TZ ' =>'TZA ' ,'US ' =>'USA ' ,'UY ' =>'URY ' ,'UZ ' =>'UZB ' ,'VU ' =>'VUT ' ,'VE ' =>'VEN ' ,'VN ' =>'VNM ' ,
76+ 'YE ' =>'YEM ' ,'ZM ' =>'ZMB ' ,'ZW ' =>'ZWE ' ,'VA ' =>'VAT ' ,'PS ' =>'PSE ' ,
77+ ];
78+
79+ $ regionsIso2 = [
5680 'Africa ' => [
5781 'DZ ' ,'AO ' ,'BJ ' ,'BF ' ,'BI ' ,'CV ' ,'CM ' ,'CF ' ,'TD ' ,'KM ' ,'CG ' ,'CD ' ,'CI ' ,'DJ ' ,'EG ' ,'GQ ' ,'ER ' ,'SZ ' ,'ET ' ,'GA ' ,'GM ' ,'GH ' ,'GN ' ,'GW ' ,
5882 'KE ' ,'LS ' ,'LR ' ,'LY ' ,'MG ' ,'MW ' ,'ML ' ,'MR ' ,'MU ' ,'MA ' ,'MZ ' ,'NA ' ,'NE ' ,'NG ' ,'RW ' ,'ST ' ,'SN ' ,'SC ' ,'SL ' ,'SO ' ,'ZA ' ,'SS ' ,'SD ' ,'TZ ' ,'TG ' ,'TN ' ,'UG ' ,'ZM ' ,'ZW ' ,
@@ -71,7 +95,7 @@ public function run(): void
7195 ],
7296 ];
7397
74- $ nameJp = [
98+ $ nameJpIso2 = [
7599 'JP ' =>'日本 ' ,'CN ' =>'中国 ' ,'KR ' =>'大韓民国 ' ,'KP ' =>'朝鮮民主主義人民共和国 ' ,'TW ' => '台湾 ' ,
76100 'SG ' =>'シンガポール ' ,'MY ' =>'マレーシア ' ,'TH ' =>'タイ ' ,'VN ' =>'ベトナム ' ,'PH ' =>'フィリピン ' ,'ID ' =>'インドネシア ' ,
77101 'LA ' =>'ラオス ' ,'KH ' =>'カンボジア ' ,'MM ' =>'ミャンマー ' ,'LK ' =>'スリランカ ' ,'IN ' =>'インド ' ,'BD ' =>'バングラデシュ ' ,
@@ -89,22 +113,31 @@ public function run(): void
89113 'AU ' =>'オーストラリア ' ,'NZ ' =>'ニュージーランド ' ,'PG ' =>'パプアニューギニア ' ,'FJ ' =>'フィジー ' ,'WS ' =>'サモア ' ,'SB ' =>'ソロモン諸島 ' ,'TO ' =>'トンガ ' ,'TV ' =>'ツバル ' ,'VU ' =>'バヌアツ ' ,'FM ' =>'ミクロネシア連邦 ' ,'MH ' =>'マーシャル諸島 ' ,'PW ' =>'パラオ ' ,'KI ' =>'キリバス ' ,'NR ' =>'ナウル ' ,
90114 ];
91115
92- $ regionByCode = [];
93- foreach ($ regions as $ regionName => $ codes ) {
94- foreach ($ codes as $ code ) {
95- $ regionByCode [$ code ] = $ regionName ;
116+ $ countriesIso3 = array_map (function ($ c ) use ($ iso2to3 , $ nameJpIso2 ) {
117+ [$ code2 , $ nameEn ] = $ c ;
118+ $ code3 = $ iso2to3 [$ code2 ] ?? null ;
119+ if (!$ code3 ) {
120+ throw new RuntimeException ("ISO2 code {$ code2 } has no ISO3 mapping. " );
96121 }
97- }
98-
99- $ rows = array_map (function ($ c ) use ($ regionByCode , $ nameJp ) {
100- $ code = $ c [0 ];
101122 return [
102- 'state_party_code ' => $ code ,
103- 'name_en ' => $ c [1 ],
104- 'name_jp ' => $ nameJp [$ code ] ?? null ,
105- 'region ' => $ regionByCode [$ code ] ?? null ,
123+ 'state_party_code ' => $ code3 ,
124+ 'name_en ' => $ nameEn ,
125+ 'name_jp ' => $ nameJpIso2 [$ code2 ] ?? null ,
106126 ];
107- }, $ countries );
127+ }, $ countriesIso2 );
128+
129+ $ regionByIso3 = [];
130+ foreach ($ regionsIso2 as $ regionName => $ codes2 ) {
131+ foreach ($ codes2 as $ code2 ) {
132+ $ code3 = $ iso2to3 [$ code2 ] ?? null ;
133+ if ($ code3 ) $ regionByIso3 [$ code3 ] = $ regionName ;
134+ }
135+ }
136+
137+ $ rows = array_map (function ($ row ) use ($ regionByIso3 ) {
138+ $ row ['region ' ] = $ regionByIso3 [$ row ['state_party_code ' ]] ?? null ;
139+ return $ row ;
140+ }, $ countriesIso3 );
108141
109142 Country::query ()->upsert (
110143 $ rows ,
0 commit comments