Скажем, я получил файлы классов миграции a.php
, b.php
, c.php
и d.php
. Как откат к определенному состоянию миграции, состояние, определенное в b.php
, например, с помощью команды artisan?
Laravel 4 artisan - как откат к определенному состоянию миграции?
Ответ 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