только для отката:
Rolled back: 2015_05_15_195423_alter_table_web_directories
php artisan migrate:rollback
, 3 моей миграции откатываются.
Rolled back: 2015_05_15_195423_alter_table_web_directories
Rolled back: 2015_05_13_135240_create_web_directories_table
Rolled back: 2015_05_13_134411_create_contacts_table
обе мои таблицы web_directories
и my contacts
непреднамеренно.
К сожалению, я никогда не хочу, чтобы это произошло, и если я могу откатиться только от этого конкретного, эта катастрофа никогда не случится.
кто-то может научить меня, как предотвратить это снова.
Любые рекомендации будут высоко оценены.
Если вы посмотрите в таблице migrations
, вы увидите, что каждая миграция имеет номер партии. Поэтому, когда вы откатываете назад, он откатывает каждую миграцию, которая была частью последней партии.
Если вы хотите только отменить последнюю миграцию, просто увеличьте номер партии на единицу. Затем в следующий раз, когда вы запустите команду rollback
, она будет откатывать только одну миграцию, как свою, в свою "пакетную".
Откат одного шага. Врожденная.
php artisan migrate:rollback --step=1
И вот страница руководства: docs.
Невозможно обойтись без каких-либо хлопот. Подробнее см. В разделе Мартин Bean .
Если вы не можете сделать то, что сказано @Martin Bean, тогда вы можете попробовать другой трюк.
Создайте новую миграцию и в этом файле в методе up() вставьте то, что в методе down() миграции, которую вы хотите отменить, и в методе down() вставьте то, что в методе up().
Например, если ваша первоначальная миграция похожа на это
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id')->unsigned();
$table->string('name');
});
}
public function down()
{
Schema::drop('users');
}
то в новом файле миграции сделайте это
public function up()
{
Schema::drop('users');
}
public function down()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id')->unsigned();
$table->string('name');
});
}
а затем запустите миграцию, он удалит таблицу. и если вы снова захотите, чтобы обратно просто откат.
Возможно, будет немного поздно ответить на этот вопрос, но здесь очень хороший, чистый и эффективный способ сделать это, я чувствую. Я постараюсь быть как можно более тщательным.
Перед созданием ваших миграций создайте разные каталоги:
database
|
migrations
|
batch_1
batch_2
batch_3
Затем при создании ваших миграций выполните следующую команду (используя ваши таблицы в качестве примера):
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_1
или
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_2
или
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_3
Приведенные выше команды сделают файл миграции в пределах данного каталога. Затем вы можете просто запустить следующую команду для переноса файлов через назначенные каталоги.
php artisan migrate alter_table_web_directories --path=database/migrations/batch_1
* Примечание. Вы можете изменить batch_1 на batch_2 или batch_3 или на любое другое имя папки, в которой хранятся файлы миграции. Пока он остается в каталоге базы данных/миграции или в каком-то определенном каталоге.
Далее, если вам нужно отменить свои конкретные миграции, вы можете откатить пакет, как показано ниже:
php artisan migrate:rollback --step=1
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_1
или
php artisan migrate:rollback --step=2
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_2
или
php artisan migrate:rollback --step=3
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_3
Использование этих методов позволит вам больше гибкости и контроля над вашей базой данных и любыми изменениями, внесенными в вашу схему.
Перенесите таблицы один за другим.
Измените номер партии миграции, которую вы хотите откат, до самого высокого.
Запустить миграцию: откат.
Не может быть самым удобным способом решения крупных проектов.
В качестве указанного в руководстве Laravel, вы можете откатить определенное количество миграций с помощью параметра --step
php artisan migrate:rollback --step=5
INSERT INTO homestead.bb_migrations (`migration`, `batch`) VALUES ('2016_01_21_064436_create_victory_point_balance_table', '2')
что-то вроде этого
Чтобы отменить последнюю операцию миграции, вы можете использовать команду отката. Эта команда откатывает последнюю "пакетную" миграцию, которая может содержать несколько файлов миграции:
php artisan migrate:rollback
Вы можете откатить ограниченное количество миграций, предоставив параметр шага команде отката. Например, следующая команда откатит последние миграции:
php artisan migrate:rollback --step=1
Команда migrate: reset откатит все ваши миграции приложений:
php artisan migrate:reset
Откат и миграция в одиночной команде
Команда migrate: refresh откатит все ваши миграции и выполнит команду migrate. Эта команда эффективно воссоздает всю вашу базу данных:
php artisan migrate:refresh
//Обновите базу данных и запустите все семплы базы данных...
php artisan migrate:refresh --seed
Вы можете выполнить откат и переназначить ограниченное количество миграций, предоставив параметр шага команде обновления. Например, следующая команда откатит и перенастроит последние пять миграций:
php artisan migrate:refresh --step=5
Удалить все таблицы и перенести
Команда migrate: fresh выведет все таблицы из базы данных и выполнит команду migrate:
php artisan migrate:fresh
php artisan migrate:fresh --seed