2015-05-23 4 views
2

Используя Laravel 5, я уже прошел несколько миграций DB и понял, что таблица, которую я создал с моим первым раундом миграции, больше не нужна. Я хочу избавиться от таблицы, чтобы избежать какой-либо путаницы в будущем, но, очевидно, мне также необходимо предотвратить повторное создание таблицы, если я сброшу все миграции.Laravel drop table with migration without rollback

Я думаю, что было бы лучше просто удалить миграцию в целом, поэтому, если я обновляю таблицу, она никогда не создается вообще. А потом, возможно, просто отбросьте стол вручную.

У меня есть данные в моей БД, поэтому я бы предпочел не откатываться и не обновлять все, каков правильный способ сбросить таблицу и удалить ее из повторного создания, если я обновляю свои миграции?

+1

Я бы просто выполнил миграцию, чтобы удалить таблицу, применить миграцию, а затем удалить эту миграцию, а также исходную миграцию, чтобы создать таблицу из вашей папки миграции. Я прочитал, что вы можете безопасно напрямую удалять миграции, пока они больше не активны. Я пробовал это сам и не испытывал никаких проблем (хотя я никогда не перестраивал свою базу данных из миграций впоследствии). – user2027202827

+0

как насчет ссылки на эту миграцию в таблице миграции? – dangel

+0

Извините, я думаю, мой ответ был неполным. После удаления файла вы должны запустить 'php composer dump-autoload'. Возможно, стоит запустить тестовую миграцию, которую вы можете позже отбросить, чтобы убедиться, что это работает так, как ожидалось, поскольку я ни в коем случае не являюсь гуру-ларавелла. Надеюсь, это может отправить вас в правильном направлении. – user2027202827

ответ

1

Вы можете создать новую миграцию с до функции, как этот

public function up() 
{ 
    Schema::table('table_name', function (Blueprint $table) { 
     $table->drop(); 
    }); 
} 
0

Off верхней части моей головы, я вижу 2 способа, в котором вы можете сделать это.

Метод 1 является длинным и добрым досадным, если у вас есть более 50 таблиц. Метод 2 - это чистый эффективный и менее инвазивный способ достижения этого (я бы выбрал этот).

Метод 1

Следующие шаги я бы предпринять, чтобы решить ситуацию:

  • Шаг 1

Экспорт таблиц базы данных и данных, так что вы есть резервное копирование всего на всякий случай, если что-то пойдет не так.

  • Шаг 2

Перейти в каталог миграции и найти файл, специфичные для этой таблицы

  • Шаг 3

Внутри публичной функции up():

Schema::table('table_name', function (Blueprint $table) { 
      $table->drop(); 
    }); 
  • Шаг 4

Перейти в каждую таблицу в файле миграции и закомментируйте обе следующие методы:

public function up() 

и

public function down() 
  • Шаг 5

Откройте консоль и перейдите в каталог, где приложение Laravel живет

  • Шаг 6

выполните следующую команду:

php artisan migrate 

Запустив приведенную выше команду, метод drop table будет активирован, а все остальные таблицы останутся неповрежденными (при условии, что у вас нет ограничений внешнего ключа, которые препятствовали бы удалению базы данных из таблицы).

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

Метод 2

  • Шаг 1

Создать папку в каталоге базы данных \ кочевок и имя что-то вроде "passive_rollback"

  • Шаг 2

Просто запустите следующую команду:

php artisan migrate:rollback my_table_name_here --path=database/migrations/passive_rollback 

выше шаг будет откатить одну таблицу, которая находится на пути, который вы указали. Этот метод также можно использовать для управления версиями баз данных и организации схемы по релевантности или разделам. Предоставляя вам больше контроля над тем, какие части базы данных вы хотите работать через laravel!

 Смежные вопросы

  • Нет связанных вопросов^_^