diff --git a/database/migrate.php b/database/migrate.php index 1061cdd..d6196ee 100644 --- a/database/migrate.php +++ b/database/migrate.php @@ -69,9 +69,37 @@ try { // Verificar si ya fue ejecutada if (in_array($filename, $executedFiles)) { - echo "⏭️ Saltando $filename (ya ejecutada)\n"; - $skipped_count++; - continue; + // Verificación extra: si el SQL crea tablas, comprobar que realmente existan. + // Si alguna tabla del archivo no existe, re-ejecutar la migración. + $sqlRaw = file_get_contents($file); + preg_match_all( + '/CREATE\s+TABLE\s+(?:IF\s+NOT\s+EXISTS\s+)?`?(\w+)`?/i', + $sqlRaw, + $tableMatches + ); + $missingTable = false; + foreach ($tableMatches[1] as $tableName) { + $rows = $db->fetchAll( + "SELECT COUNT(*) as cnt FROM information_schema.tables + WHERE table_schema = DATABASE() AND table_name = ?", + [$tableName] + ); + if (empty($rows) || ($rows[0]['cnt'] ?? 0) == 0) { + $missingTable = $tableName; + break; + } + } + if ($missingTable) { + echo "⚠️ $filename registrada pero tabla '$missingTable' no existe — re-ejecutando\n"; + // Quitar del registro para re-ejecutar + $db->execute("DELETE FROM migrations WHERE filename = ?", [$filename]); + $executedFiles = array_diff($executedFiles, [$filename]); + // Continúa a la ejecución abajo + } else { + echo "⏭️ Saltando $filename (ya ejecutada)\n"; + $skipped_count++; + continue; + } } echo "🔄 Ejecutando migración: $filename\n";