Подтвердить что ты не робот

Laravel 4 artisan - как откат к определенному состоянию миграции?

Скажем, я получил файлы классов миграции a.php, b.php, c.php и d.php. Как откат к определенному состоянию миграции, состояние, определенное в b.php, например, с помощью команды artisan?

4b9b3361

Ответ 1

Я боюсь, вы не можете сделать это напрямую.

Вы можете: 1, Откат Последняя операция переноса (все миграции выполнялись в последней партии)

php artisan migrate:rollback

2, Откат всех миграций

php artisan migrate:reset

3, отмените все миграции и снова запустите их

php artisan migrate:refresh  
php artisan migrate:refresh --seed

В вашей ситуации измените метод b.php и up(), затем выполните команду artisan migrate:refresh.

Ответ 2

Есть способ взломать его, вручную отредактировав базу данных. В таблице migrations измените столбец batch, указав последнюю миграцию другим номером партии. Имейте в виду, что они в порядке возрастания, поэтому отредактируйте соответственно. Это отслеживает, какие миграции были применены отдельно.

Затем запустите artisan:rollback и отмените последнюю "партию".

Итак, если вы хотите разделить их все, то начинайте с вершины и дайте каждому 1,2,3,4,5 и так далее... Вы можете видеть, что это легко обрабатывается сценарием, и вы можете сделать ремесленника если вы хотите отделить все свои миграции.

Ответ 3

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

Таким образом, вы можете быть гибким, если хотите отменить 2-х шагов назад, вы можете просто создать новую миграцию, чтобы выполнить нужные изменения, а затем запустить новую миграцию с помощью миграции php artisan.

Ответ 4

На самом деле, эта функция еще не существует. на удивление

Лучшей идеей является создание нового файла backtob.php и вызов его другим файлам переноса. Чтобы избежать копирования и вставки, вы можете сделать что-то вроде этого:

class BacktoB {
  public function up () {
     // the database is in the after D state //
     $migrateD = new D();
     $migrateD->down();
     // the database is in the after C state //
     $migrateC = new C();
     $migrateC->down();
     // the database is in the before C state //
     // before C = B //
  }
  public function down () {
     // the database is in the B state //
     $migrateC = new C();
     $migrateC->up();
     // the database is in the after C state //
     $migrateD = new D();
     $migrateD->up();
     // the database is in the after D state //
  }
}

Как вы можете видеть, вы можете создавать вверх и вниз, вызывая вверх и вниз эти миграции, что вы хотите вернуть.

Это не идеал, но это то, что мы можем сделать.

Ответ 5

Если вы действительно хотели - вы могли бы написать настраиваемую функцию, которая запрашивает таблицу миграции, ищет файл, который вам нужен, и сколько раз вы откатываете назад, а затем цикл "migrate: rollback" до вы достигнете необходимой миграции...

Ответ 6

Laravel 5.3

С Laravel 5.3 нет необходимости в тяжелых сценариях. Поскольку он позволяет откатить заданное количество миграций.

php artisan migrate:rollback --step=1

Здесь страница для справки.

Ответ 7

Существует простой, но грязный способ:

Если у вас есть миграции a.php, b.php и c.php и вы хотите откат c и b, вы можете просто изменить a.php таким образом, чтобы произошла синтаксическая ошибка. Отбросьте полуточку или что-то еще.

Итак, когда вы запустите php artisan migrate:rollback, он откатит оба c и b и остановится с ошибкой в ​​a. С этого момента откат c и b будет считаться последней миграцией.

Не забудьте исправить любую ошибку, которую вы сделали специально в a.php.

Ответ 8

Поскольку Laravel просто предоставляет миграцию php-artisan: откат для отката вашей миграции script, лучший способ отменить выбранную миграцию script - это создать новую миграцию script и поместить script в ваш метод down (по выбранной миграции script) к вновь созданной миграции script. Надеюсь на эту помощь.

Ответ 9

Используйте команду php artisan migrate: rollback.

php artisan migrate:rollback

Чтобы узнать, какой откат будет выполнен, используйте параметр -pretend.

php artisan migrate:rollback --pretend

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

php artisan migrate:rollback --pretend --database=other-one