Стандартна команда Laravel migrate:fresh видаляє всі таблиці перед повторним запуском міграцій. Це зручно, поки вам не знадобиться зберегти певні дані: наприклад, наповнення (seed data), яке не хочеться генерувати заново, або тестові акаунти. Пакет Custom Fresh від Mahmoud Ramadan вирішує цю проблему, додаючи команду fresh:custom, яка оновлює базу даних, зберігаючи обрані таблиці.
# Як обрати таблиці для збереження
Припустимо, ви розробляєте сервіс передплат і постійно змінюєте структуру бази, але хочете залишити тестові профілі або дані в таблиці plans. Потрібні назви можна вказати через кому як аргумент або скористатися прапорцем --keep. Обидва варіанти працюють однаково:
php artisan fresh:custom users,plans
php artisan fresh:custom --keep=users,plans
Усі інші таблиці буде видалено, а міграції запущено заново. Так ваші дані залишаться на місці, поки решта схеми оновлюється з нуля.
# Glob-патерни для групування таблиць
Пакет Cashier створює таблиці subscriptions та subscription_items, і перелічувати кожну вручну буває втомливо. Custom Fresh підтримує glob-патерни: символ зірочки в кінці дозволяє вибрати всі таблиці зі спільним префіксом:
php artisan fresh:custom "users,plans,subscription_*"
# Попередній перегляд перед виконанням
Оскільки команда видаляє дані, ви можете заздалегідь перевірити список таблиць, які буде очищено або збережено. Прапорець --explain виведе детальний звіт без внесення змін у базу:
php artisan fresh:custom users,plans,subscription_* --explain
Також можна вказати конкретне підключення за допомогою --database — це зручно, якщо частина даних зберігається в окремій базі:
php artisan fresh:custom monthly_revenue --database=analytics
fresh:custom із прапорцем --explain та без нього# Конфігурація та події
В опублікованому файлі конфігурації можна задати налаштування за замовчуванням. Таблиці в always_keep зберігатимуться автоматично, параметр patterns дозволяє зафіксувати правила пошуку, а confirm_in визначає середовища, де команда вимагатиме підтвердження перед видаленням:
return [
'always_keep' => ['users', 'plans'],
'patterns' => ['subscription_*'],
'confirm_in' => ['staging', 'production'],
];
Під час роботи команда генерує три події для логування або додаткових дій: RefreshingDatabase (перед видаленням), TablesDropped (після видалення) та DatabaseRefreshed (після завершення міграцій).
# Встановлення
Встановіть пакет за допомогою Composer:
composer require ramadan/custom-fresh
Custom Fresh потребує PHP 8.2 або вище та підтримує Laravel версій від 10 до 13. Документація та вихідний код доступні на GitHub.