getConnection(); echo "[OK] Подключение к базе данных успешно\n\n"; // 1. Создаем таблицу для отслеживания миграций $db->exec(" CREATE TABLE IF NOT EXISTS migrations ( id SERIAL PRIMARY KEY, filename VARCHAR(255) NOT NULL UNIQUE, applied_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) "); echo "[OK] Таблица migrations готова\n"; // 2. Получаем список уже примененных миграций $stmt = $db->query("SELECT filename FROM migrations ORDER BY filename"); $applied = $stmt->fetchAll(PDO::FETCH_COLUMN); echo "[INFO] Уже применено миграций: " . count($applied) . "\n\n"; // 3. Сканируем папку на SQL-файлы $migrationFiles = glob(__DIR__ . '/*.sql'); sort($migrationFiles); $newMigrations = 0; foreach ($migrationFiles as $file) { $filename = basename($file); // Пропускаем seed_data.sql - он запускается отдельно if ($filename === 'seed_data.sql') { continue; } // Проверяем, была ли миграция уже применена if (in_array($filename, $applied)) { echo "[SKIP] $filename (уже применена)\n"; continue; } // Применяем миграцию echo "[RUN] Применяю $filename... "; $sql = file_get_contents($file); try { $db->exec($sql); // Записываем в таблицу миграций $stmt = $db->prepare("INSERT INTO migrations (filename) VALUES (?)"); $stmt->execute([$filename]); echo "OK\n"; $newMigrations++; } catch (PDOException $e) { echo "ОШИБКА!\n"; echo " Причина: " . $e->getMessage() . "\n"; echo "\n[!] Миграция остановлена из-за ошибки\n"; exit(1); } } echo "\n-------------------------------------------\n"; if ($newMigrations > 0) { echo "[SUCCESS] Применено новых миграций: $newMigrations\n"; } else { echo "[INFO] Все миграции уже применены\n"; } // 4. Спрашиваем про seed_data $seedFile = __DIR__ . '/seed_data.sql'; if (file_exists($seedFile)) { echo "\n[?] Хотите загрузить начальные данные (seed_data.sql)?\n"; echo " Запустите: php migrations/migrate.php --seed\n"; if (isset($argv[1]) && $argv[1] === '--seed') { echo "\n[RUN] Загружаю seed_data.sql... "; try { $sql = file_get_contents($seedFile); $db->exec($sql); echo "OK\n"; } catch (PDOException $e) { echo "ОШИБКА: " . $e->getMessage() . "\n"; } } } echo "\n===========================================\n"; echo " Миграции завершены!\n"; echo "===========================================\n"; } catch (PDOException $e) { echo "[ERROR] Ошибка подключения к БД: " . $e->getMessage() . "\n"; exit(1); }