connection->beginTransaction(); $this->connection->execute(SqlQuery::create('DELETE FROM countries')); $insertSql = 'INSERT INTO countries (code, name_en, name_de, name_native, updated_at) VALUES (?, ?, ?, ?, ?)'; $processed = 0; foreach ($countries as $countryData) { $country = $this->parseCountryData($countryData); if ($country) { $this->connection->execute(SqlQuery::create($insertSql, [ $country->code, $country->nameEn, $country->nameDe, $country->nameNative, $country->updatedAt, ])); $processed++; } } $this->connection->commit(); echo "Länderdatenbank aktualisiert: {$processed} Länder geladen\n"; return $processed; } public function getCountryByCode(string $code): ?Country { $sql = 'SELECT code, name_en, name_de, name_native, updated_at FROM countries WHERE code = ?'; $result = $this->connection->queryOne(SqlQuery::create($sql, [$code])); if (! $result) { return null; } return new Country( code: $result['code'], nameEn: $result['name_en'], nameDe: $result['name_de'], nameNative: $result['name_native'], updatedAt: $result['updated_at'] ); } private function parseCountryData(array $countryData): ?Country { $code = $countryData['cca2'] ?? null; $nameEn = $countryData['name']['common'] ?? null; if (! $code || ! $nameEn) { return null; } $nameDe = $countryData['translations']['deu']['common'] ?? $nameEn; $nativeNames = $countryData['name']['nativeName'] ?? []; $nameNative = ! empty($nativeNames) ? $nativeNames[array_key_first($nativeNames)]['common'] ?? $nameEn : $nameEn; return new Country( code: $code, nameEn: $nameEn, nameDe: $nameDe, nameNative: $nameNative, updatedAt: date('Y-m-d H:i:s') ); } }