MigrAlign — це Laravel-пакет, який виявляє розбіжності між вашими файлами міграцій та реальною структурою бази даних. Він розроблений для боротьби із «дрейфом схеми» (schema drift), що виникає, коли розробники редагують таблиці напряму, пропускають міграції або працюють у різних оточеннях.
# Як це працює
MigrAlign аналізує ваші наміри, скануючи виклики Schema::create() та Schema::table() у міграціях, а потім порівнює їх із поточним станом бази даних через information_schema (підтримуються MySQL та MariaDB). Отриману різницю пакет пропонує як набір змін. Ви можете переглянути їх перед виконанням:
php artisan migralign:sync --dry-run
# Класифікація ризиків
MigrAlign не застосовує всі зміни наосліп, а розділяє їх на три категорії:
- Safe (безпечні): додавання nullable-колонок, розширення розміру типів або зміни лише в метаданих.
- Risky (ризиковані): звуження типів даних, зміна колонки з nullable на not-null або скорочення значень в enum.
- Destructive (деструктивні): видалення колонок або таблиць.
Безпечні зміни застосовуються автоматично, якщо активована опція auto_apply_safe. Для ризикованих та деструктивних операцій MigrAlign завжди запитує підтвердження, щоб уникнути випадкової втрати даних.
# Точкова синхронізація
Ви можете обмежити синхронізацію конкретною таблицею або окремою міграцією, якщо потрібно оновити лише певну частину схеми:
# Синхронізувати конкретну таблицю
php artisan migralign:sync --table=users
# Синхронізувати зміни з конкретної міграції
php artisan migralign:sync --migration=2024_01_01
# Застосувати всі зміни без запитів підтвердження
php artisan migralign:sync --force
Після завершення MigrAlign виводить звіт про кожну зміну: застосовано, пропущено, очікує або помилка.
# Встановлення та налаштування
Встановіть пакет через Composer та опублікуйте файл конфігурації:
composer require migralign/laravel-migralign
php artisan vendor:publish --tag=migralign-config
У конфігурації можна вказати шлях до міграцій, таблиці-винятки та параметри автоматичного застосування змін:
return [
'migrations_path' => database_path('migrations'),
'ignored_tables' => ['migrations', 'sessions', 'jobs', 'failed_jobs'],
'auto_apply_safe' => true,
'connection' => null,
];
MigrAlign потребує PHP 8.2+ (8.3+ для Laravel 13) та підтримує Laravel 11, 12 і 13. Пакет працює тільки з MySQL та MariaDB. Зверніть увагу, що міграції з дуже складною динамічною логікою все ще можуть потребувати ручного контролю.
Дізнатися більше та переглянути вихідний код можна на GitHub.