
Міграція, яка додає колонку user_id без відповідного індексу, щоразу проходить ревʼю без зауважень. На вигляд усе гаразд: Laravel не видає помилок, міграція виконується успішно, CI світиться зеленим. А за кілька місяців хтось помічає JOIN, який обробляє двісті рядків цілих вісім секунд, і ніхто не може згадати, чому так сталося.
Саме для таких випадків створено Truss 1.5 — інструмент, що виявляє проблеми ще до релізу. Його називають «лікарем схеми» (schema doctor).
Я писав про Truss у липні: це інтерактивна ER-діаграма вашої бази даних у Laravel, яку можна масштабувати в реальному часі. З того часу проєкт став популярнішим, ніж я очікував: майже 300 встановлень на Packagist та понад 70 зірок на GitHub завдяки рекомендаціям спільноти. Цей інтерес і підштовхнув мене до створення нової функції: діаграма — це чудовий спосіб візуалізації, але вона не підкаже, якщо зі схемою щось не так. А truss:doctor — підкаже.
Що він знаходить
Запустіть інструмент, і він виявить проблеми, які помітні вже на рівні структури:
- Таблиці без
primary key. Foreign keysбез підтримки індексу.- Дублікати або надлишкові індекси.
Foreign keys, типи яких не збігаються з ключами, на які вони посилаються.- Колонки для грошових операцій, збережені як
float. - Pivot-таблиці без унікального ключа, неіндексовані
deleted_atтощо.
Загалом доступно 13 правил у категоріях цілісності, індексів та типів. Кожне має стабільний код (наприклад, TRUSS-IDX-001), щоб проблему можна було легко ідентифікувати, ігнорувати або змінити рівень її важливості.
Правила враховують особливості бази даних: наприклад, неіндексований foreign key вважається помилкою (error) у PostgreSQL та SQLite, але лише інформаційним повідомленням (info) у MySQL та MariaDB, оскільки вони створюють такі індекси автоматично.
У терміналі та CI
php artisan truss:doctor
php artisan truss:doctor --preset=strict --fail-on=warning
php artisan truss:doctor --format=json
Команда повертає ненульовий код виходу (non-zero exit code), якщо знайдено проблему критичного рівня. Таким чином, міграція з помилкою зупинить збірку проєкту. Жодного AI, жодних запитів чи аналізу даних у рядках: лише детермінований аналіз структури, безпечний для запуску в commit hook або CI-пайплайнах.
На дашборді
Ті самі результати зʼявляються в інтерфейсі у новій панелі Health (іконка серця). Проблемні таблиці позначаються прямо на діаграмі, а помилкові колонки підсвічуються. Один двигун, два фронтенди — залежно від того, де ви працюєте: у терміналі чи в браузері.
Спробуйте самі
У демо-версії можна побачити роботу інструмента на прикладі вигаданої схеми. Відкрийте панель Health, і ви побачите кілька foreign keys із відсутніми індексами.
- Демо: trussphp.com/demo
- Документація з кодами правил: trussphp.com/guides/schema-doctor
- Release notes: v1.5.0 на GitHub
Оновіться через composer update albertoarena/laravel-truss, а потім запустіть php artisan truss:doctor і перевірте свій проєкт.
Що далі
Це лише перша фаза: двигун та 13 правил. У планах — файли ігнорування (suppression files), нові перевірки та форматування для CI. Якщо правило здається занадто гучним, занадто тихим або ви хочете бачити специфічну перевірку — приєднуйтесь до обговорення. Мені цікаво дізнатися, що знайде «лікар» у ваших базах даних.