Безопасно удалить миграцию в 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)

б) Если migrate:rollbackне работает, сделайте это вручную (я помню ошибки с миграцией: откат в предыдущих версиях):

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

2
Спасибо. Мне нужно было после удаления миграции забыть запустить дамп-автозагрузку композитора
Тео Кузелис

7
Если вы запустили миграцию, «правильный» способ - запустить migrate:rollbackоткат миграции, затем удалить файл миграции и выгрузить автозагрузку. Не нужно взламывать БД или таблицу миграции.
Джейк Уилсон

отличный ответ за шаги после (php artisan migrate) (Y)
Имран Хан

Мой Бог и я мучили себя, когда я был неправ. Спасибо.
Пабло Контрерас

4. Удалить фактическую таблицу из БД
Jin

64

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


Хотя он не провел миграцию. Вы не можете откатить то, что на самом деле не сделали, не так ли?
Стефан

9
Нет, вы не можете, но если это так, то в базе данных миграций не должно быть истории, что означает, что вы можете безопасно удалить файл.
Джейсон Льюис

14
 php artisan migrate:fresh

Нужно делать работу, если вы находитесь в разработке и желаемый результат - начинать все сначала.

В производстве это, возможно, не желаемая вещь, поэтому вы должны быть объявлены. (Команда migrate: fresh удалит все таблицы из базы данных, а затем выполнит команду migrate).


5
3 отзыва? ОП попросил способ удалить миграцию, а не уничтожить и обновить всю базу данных. Это ужасный совет, не делайте этого, если не знаете, что делаете.
Goodbytes

Пожалуйста, прочитайте о разнице между миграцией: обновлением и миграцией: свежее, что вы видели, описывая первое, а позднее способ частичного сброса избегает ручной работы!
Joash

1
migrate: fresh немедленно удаляет ВСЕ таблицы и повторно запускает миграцию, как будто выполняется в первый раз. В этом нет ничего частичного ... любые данные исчезнут. Это решит проблему, но это не правильный ответ на вопрос.
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
Вы также можете просто сделать «compaser 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.