Files
web_work/migrations/migrate.php
kirill.khorkov 8a93cf8657 Delete comment
2025-12-16 19:18:03 +03:00

96 lines
3.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
require_once __DIR__ . '/../config/database.php';
echo "===========================================\n";
echo " AETERNA - Система миграций базы данных\n";
echo "===========================================\n\n";
try {
$db = Database::getInstance()->getConnection();
echo "[OK] Подключение к базе данных успешно\n\n";
$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";
$stmt = $db->query("SELECT filename FROM migrations ORDER BY filename");
$applied = $stmt->fetchAll(PDO::FETCH_COLUMN);
echo "[INFO] Уже применено миграций: " . count($applied) . "\n\n";
$migrationFiles = glob(__DIR__ . '/*.sql');
sort($migrationFiles);
$newMigrations = 0;
foreach ($migrationFiles as $file) {
$filename = basename($file);
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";
}
$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);
}