Schema-лікар на прийомі: як інструмент Truss знаходить помилки в базах даних Laravel

Перекладено ШІ 0 Alberto Arena 05 серпня, 2026

Забутий індекс у міграції може непомітно сповільнити застосунок і з часом створити критичні проблеми з продуктивністю. Новий інструмент `truss:doctor` автоматично виявляє архітектурні дефекти бази даних ще до того, як код потрапить у продакшн.

A stethoscope resting on a handwritten notebook next to a laptop keyboard, in black and white

Міграція, яка додає колонку 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 із відсутніми індексами.

Оновіться через composer update albertoarena/laravel-truss, а потім запустіть php artisan truss:doctor і перевірте свій проєкт.

Що далі

Це лише перша фаза: двигун та 13 правил. У планах — файли ігнорування (suppression files), нові перевірки та форматування для CI. Якщо правило здається занадто гучним, занадто тихим або ви хочете бачити специфічну перевірку — приєднуйтесь до обговорення. Мені цікаво дізнатися, що знайде «лікар» у ваших базах даних.

Популярні

Інше, що варто прочитати

42 Оновлено 26 червня, 2026

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

20 Оновлено 26 червня, 2026

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю

17 Оновлено 26 червня, 2026

Обробка геопросторових даних за допомогою Laravel Magellan

Ви готові відкрити нові горизонти у роботі з геопросторовими даними в Laravel? Дізнайтеся, як за допомогою PostGIS та пакету Laravel-Magellan можна легко зберігати, запитувати та маніпулювати інформацією про розташування, перетворюючи ваші проекти на вражаючі рішення у сфері картографії та геолокації!