#!/usr/bin/env php PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]); } catch (PDOException $e) { die("Ошибка подключения к БД: " . $e->getMessage() . "\n"); } $migrationRunner = new MigrationRunner($pdo); // Обработка аргументов командной строки $command = $argv[1] ?? null; switch ($command) { case 'migrate': echo "Запуск миграций...\n"; $migrationRunner->migrate(); echo "Миграции завершены!\n"; break; case 'rollback': echo "Откат последней миграции...\n"; $migrationRunner->rollback(); echo "Откат завершен!\n"; break; case 'status': echo "Проверка статуса миграций...\n"; $stmt = $pdo->query("SELECT migration_name, applied_at FROM migrations ORDER BY applied_at ASC"); $appliedMigrations = $stmt->fetchAll(); if (empty($appliedMigrations)) { echo "Нет примененных миграций.\n"; } else { echo "Примененные миграции:\n"; foreach ($appliedMigrations as $migration) { echo "- {$migration['migration_name']} ({$migration['applied_at']})\n"; } } // Показать непримененные миграции $migrationFiles = glob(__DIR__ . '/migrations/*.php'); natsort($migrationFiles); $appliedNames = array_column($appliedMigrations, 'migration_name'); $unapplied = []; foreach ($migrationFiles as $file) { $name = basename($file, '.php'); if (!in_array($name, $appliedNames)) { $unapplied[] = $name; } } if (!empty($unapplied)) { echo "\nНепримененные миграции:\n"; foreach ($unapplied as $migration) { echo "- $migration\n"; } } break; default: echo "Использование: php app.php [migrate|rollback|status]\n"; echo " migrate - применить все непримененные миграции\n"; echo " rollback - откатить последнюю миграцию\n"; echo " status - показать статус миграций\n"; exit(1); }