'integer', 'name' => 'string', 'iso_code_3' => 'string', 'iso_code_2' => 'string', 'numeric_code' => 'integer', 'phone_code' => 'string', 'capital' => 'string', 'currency_code' => 'string', 'native_name' => 'string', 'nationality' => 'string', 'latitude' => 'float', 'longitude' => 'float', 'flag' => 'string', ]; public function currency(): BelongsTo { return $this->belongsTo(Currency::class, 'currency_code', 'code'); } public function states(): HasMany { return $this->hasMany(State::class, 'country_id', 'id'); } public function cities(): HasMany { return $this->hasMany(City::class, 'country_id', 'id'); } public function timezones(): HasMany { return $this->hasMany(Timezone::class, 'country_id', 'id'); } public static function findByIsoCode2(string $code): ?self { return self::where('iso_code_2', $code)->first(); } public static function getAllCountryCodes(): Collection { return self::all()->pluck('iso_code_2'); } public static function getAvailableCountryOptions(): array { return self::all()->mapWithKeys(static function ($country): array { return [$country->iso_code_2 => $country->name . ' ' . $country->flag]; })->toArray(); } }