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

206

В Laravel, похоже, есть команда для создания миграции, но не удаления.

Создать команду миграции:

php artisan migrate:make create_users_table

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

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

2013_05_31_220658_create_users_table
Globalz
источник

Ответы:

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. Измените базу данных: удалите последнюю запись из таблицы миграции
malisokan
источник
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

Скорее всего, вам также нужно удалить запись из таблицы миграции.

Stephane
источник
7

Я случайно создал два раза create_users_table. Он переопределил некоторые классы и превратил откат в ErrorException.

Что вам нужно сделать, это найти autoload_classmap.php в папке vendor / composer и найти конкретную строку кода, такую ​​как

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

и отредактируйте путь. Тогда ваш откат должен быть в порядке.

JR Tan
источник
Если вы - как и я - просто пошли дальше и переименовали файл миграции, это ответ, который вы ищете! Спасибо.
Берд
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

ederrafo
источник