'presseecho', 'businessportal24' => 'businessportal', ]; /** Mapping: neue Tabelle → (legacy_portal, legacy_db, legacy_table, legacy_created_col) */ private const ENTITY_CONFIG = [ 'users' => [ 'new_table' => 'users', 'legacy_table_name' => 'sf_guard_user', 'legacy_created' => 'created_at', 'legacy_updated' => 'updated_at', ], 'companies' => [ 'new_table' => 'companies', 'legacy_table_name' => 'company', 'legacy_created' => 'created_at', 'legacy_updated' => 'updated_at', ], 'contacts' => [ 'new_table' => 'contacts', 'legacy_table_name' => 'contact', 'legacy_created' => 'created_at', 'legacy_updated' => 'updated_at', ], 'press-releases' => [ 'new_table' => 'press_releases', 'legacy_table_name' => 'press_release', 'legacy_created' => 'created_at', 'legacy_updated' => 'updated_at', ], ]; public function handle(): int { $entityOpt = $this->option('entity'); $portalOpt = $this->option('portal'); $isDryRun = (bool) $this->option('dry-run'); $entities = $entityOpt === 'all' ? array_keys(self::ENTITY_CONFIG) : [$entityOpt]; $portals = $portalOpt === 'all' ? array_keys(self::PORTAL_DB) : [$portalOpt]; if ($isDryRun) { $this->warn('[DRY-RUN] Kein tatsächlicher Schreibvorgang.'); } $totalUpdated = 0; $start = microtime(true); foreach ($entities as $entity) { $config = self::ENTITY_CONFIG[$entity] ?? null; if (! $config) { $this->error("Unbekannte Entität: {$entity}"); continue; } foreach ($portals as $portal) { $legacyDb = self::PORTAL_DB[$portal] ?? null; if (! $legacyDb) { $this->error("Unbekanntes Portal: {$portal}"); continue; } $updated = $this->fixEntity($config, $portal, $legacyDb, $isDryRun); $totalUpdated += $updated; $this->line(" [{$entity}] [{$portal}] → {$updated} Datensätze ".($isDryRun ? 'würden aktualisiert' : 'aktualisiert')); } } $elapsed = round(microtime(true) - $start, 1); $this->newLine(); $this->info("Gesamt: {$totalUpdated} Datensätze in {$elapsed}s."); return self::SUCCESS; } private function fixEntity(array $config, string $portal, string $legacyDb, bool $isDryRun): int { $newTable = $config['new_table']; $legacyTable = $config['legacy_table_name']; $legacyCreated = $config['legacy_created']; $legacyUpdated = $config['legacy_updated']; if ($isDryRun) { // Nur zählen: wie viele Datensätze hätten falsche Timestamps? return (int) DB::selectOne(" SELECT COUNT(*) as cnt FROM {$newTable} n JOIN legacy_import_map m ON m.target_id = n.id AND m.target_table = '{$newTable}' AND m.legacy_portal = '{$portal}' JOIN `{$legacyDb}`.`{$legacyTable}` lc ON lc.id = m.legacy_id WHERE n.created_at != lc.{$legacyCreated} OR n.updated_at != lc.{$legacyUpdated} ")->cnt ?? 0; } return DB::affectingStatement(" UPDATE {$newTable} n JOIN legacy_import_map m ON m.target_id = n.id AND m.target_table = '{$newTable}' AND m.legacy_portal = '{$portal}' JOIN `{$legacyDb}`.`{$legacyTable}` lc ON lc.id = m.legacy_id SET n.created_at = lc.{$legacyCreated}, n.updated_at = lc.{$legacyUpdated} "); } }