Безпечно видаліть міграцію в Laravel


206

У Laravel, здається, є команда для створення міграції, але не видалення.

Створіть команду міграції:

php artisan migrate:make create_users_table

Якщо я хочу видалити міграцію, чи можу я просто безпечно видалити відповідний файл міграцій у папці бази даних / міграцій?

Файл міграцій:

2013_05_31_220658_create_users_table

Відповіді:


375

Я випадково створив міграцію з неправильним іменем (команда:) php artisan migrate:make. Я не виконував ( php artisan migrate) міграцію, тому вирішив її видалити. Мої кроки:

  1. Видаліть файл міграції вручну в розділі app/database/migrations/my_migration_file_name.php
  2. Скидання файлів автозавантаження композитора: composer dump-autoload
  3. Розслабтесь

Якщо ви запустили міграцію ( php artisan migrate), ви можете зробити це:

а) Виконати migrate:rollback- це правильний спосіб скасувати останню міграцію (Thnx @Jakobud)

b) Якщо migrate:rollbackце не працює, зробіть це вручну (пам'ятаю помилки з міграцією: відкат у попередніх версіях):

  1. Видаліть файл міграції вручну в розділі app/database/migrations/my_migration_file_name.php
  2. Скидання файлів автозавантаження композитора: composer dump-autoload
  3. Змініть базу даних: Видаліть останній запис із таблиці міграцій

2
Дякую. Gottcha для мене після видалення міграції забував запустити композитор самоскида автозагрузку
Тео Kouzelis

7
Якщо ви запустили міграцію, "правильним" способом є запустити migrate:rollbackвідкат міграції, а потім видалити файл міграції та скинути автозавантаження. Не потрібно зламати db або таблицю міграцій.
Джейк Вілсон

чудова відповідь за кроки після (php artisan migrate) (Y)
Імран Хан

Ми з Богом мучили себе, коли помилялися. Дякую.
Пабло Контрерас

4. Видаліть фактичну таблицю з БД
Цзінь

64

Якщо міграція була запущена (прочитана: перенесена), вам слід скасувати міграцію, щоб очистити історію з таблиці бази даних. Після відкоту ви зможете безпечно видалити міграційний файл, а потім знову перейти до міграції.


Однак він не запустив міграцію. Ви не можете повернути назад те, що ви насправді не робили, чи не так?
Стефан

9
Ні, ви не можете, але якщо це так, то в базі даних міграцій не повинно зберігатися жодної історії, що означає, що ви можете безпечно видалити файл.
Джейсон Льюїс

14
 php artisan migrate:fresh

Якщо ви працюєте, якщо ви перебуваєте в стадії розвитку, бажаний результат - почати все спочатку.

На виробництві це може бути не бажаною справою, тому вам слід оголосити рекламу. (Команда migrate: fresh передасть усі таблиці з бази даних, а потім виконає команду migrate).


5
3 оновлення? ОП просила спосіб видалити міграцію, а не знищити та оновити всю базу даних. Це жахлива порада, не робіть цього, якщо ви не знаєте, що робите.
Goodbytes

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

1
мігрувати: свіжий одразу скидає ВСІ таблиці та повторно запускає міграції, ніби працює вперше. У цьому немає нічого часткового .. будь-які дані не будуть зникли. Це виправить проблему, але це неправдива відповідь на питання.
Goodbytes

12

Можливо, вам також доведеться видалити запис із таблиці міграцій.


7

Я випадково створив два рази create_users_table. Він переосмислив деякі класи та перетворив відкат у ErrorException.

Що потрібно зробити, це знайти autoload_classmap.php у папці vendor / composer і шукати конкретний рядок коду, наприклад

'CreateUsersTable' => $baseDir . '/app/database/migrations/2013_07_04_014051_create_users_table.php',

і редагувати шлях. Тоді ваш відкат має бути добре.


Якщо ви - як і я - просто пішли і перейменували файл міграції - це відповідь, яку ви шукаєте! Дякую.
Бердус

2
Ви також могли просто просто зробити "композитор dumpautoload"
FooBar

5

Я згоден з нинішніми відповідями, просто хочу додати трохи більше інформації.

До версії Laravel 5.3 і вище була додана нова функція, яка дозволить вам відмовитись від однієї міграції:

php artisan migrate:rollback --step=1

після, Вручну видаліть файл міграції під database/migrations/my_migration_file_name.php

Це відмінна функція для запуску міграції

Таким чином, ви можете безпечно видалити міграцію в laravel лише в 2 кроки


0

Я скоріше зроблю це вручну

  1. Спочатку видаліть модель (якщо у вас немає) модель більше не потрібна
  2. Видаліть міграцію з ...database/migrationsпапки
  3. Якщо ви вже перенесли, тобто якщо ви вже запущені php artisan migrate, увійдіть у свій phpmyadmin або SQL (залежно від випадку) та у своїй базі даних, видаліть таблицю, створену міграцією.
  4. Все ж у вашій базі даних у папці міграцій знайдіть рядок із цим ім'ям файлу міграції та видаліть рядок.

Для мене працює, сподіваюся, що це допомагає!


-2

Це працює для мене:

  1. Я видалив усі таблиці з моєї бази даних, в основному таблицю міграцій.
  2. php artisan migrate:refresh

в laravel 5.5.43

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.