Laravel Schema Sentinel від розробника Ahtesham (Broadway Web Service) допомагає виявити schema drift — розбіжності між реальною структурою бази даних та вашими migrations. Пакет створює «тіньову» базу на основі міграцій, порівнює її з робочою схемою і генерує виправлення, якщо вони не збігаються.
- Глибоке виявлення розбіжностей — аудит таблиць, колонок, типів даних, nullability, дефолтних значень, індексів та foreign keys.
- Порівняння середовищ — перевірка відповідності локальних міграцій версіям на staging або production.
- Автогенерація міграцій — створення виправлень з можливістю інтерактивного перегляду.
- Візуальна панель — вбудований Livewire-компонент для моніторингу стану бази даних.
- Захист перед міграцією — автоматичне блокування
php artisan migrateу разі виявлення drift. - Та багато іншого...
# Виявлення розбіжностей
Основна команда запускає міграції у тимчасовій shadow database, а потім порівнює її з поточним з'єднанням:
php artisan schema:drift
Інструмент перевіряє ключові параметри схеми. Прапор --strict додатково підсвічує колонки або таблиці, які існують у реальній базі, але відсутні в migrations.
# Генерація виправлень
Якщо розбіжності знайдено, Sentinel може автоматично створити міграцію для їх усунення:
php artisan schema:drift --fix --interactive
Інтерактивний режим дозволяє підтвердити кожну зміну перед записом файлу. Прапор --sql виводить готовий код міграції прямо в термінал для попереднього перегляду.
# Порівняння між середовищами
Ви можете порівняти схеми з іншим оточенням замість локального:
php artisan schema:drift --compare-env=staging
Команда використовує налаштування з config/database.php. Це дозволяє переконатися, що ваші локальні міграції відповідають стану бази на staging або production перед деплоєм.
# Programmatic API
Facade Sentinel надає доступ до результатів порівняння у форматі DTO, що зручно для використання в контролерах, Livewire-компонентах або адмін-панелях:
use Sentinel\SchemaSentinel\Facades\Sentinel;
$diff = Sentinel::check(strict: true);
return response()->json([
'in_sync' => !$diff->hasDifferences(),
'drift' => $diff->toArray(),
]);
Пакет також містить готовий Blade-компонент для візуалізації здоров'я бази даних (працює лише у local середовищі):
<livewire:sentinel-database-health />
Інструмент підтримує Laravel версій 11.x–13.x. Сирцевий код Laravel Schema Sentinel доступний на GitHub.