Откат одной конкретной миграции в Laravel

я хочу

только для отката:

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 и моя таблица contacts непреднамеренно. Я никогда не хочу, чтобы это произошло, и если я смогу откатить только этот конкретный случай, эта катастрофа никогда не произойдет.

Ответ 1

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

Если вы хотите только отменить последнюю миграцию, просто увеличьте номер партии на единицу. Затем в следующий раз, когда вы запустите команду rollback, она будет откатывать только одну миграцию, как свою, в свою "пакетную".

Ответ 2

Laravel 5.3 +

Откат одного шага. Врожденная.

php artisan migrate:rollback --step=1

И вот страница руководства: docs.


Laravel 5.2 и до

Невозможно обойтись без каких-либо хлопот. Подробнее см. В разделе Мартин Bean .

Ответ 3

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

php artisan migrate:rollback --step=1

Ответ 4

Если вы не можете сделать то, что сказано @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');
    });
}

а затем запустите миграцию, он удалит таблицу. и если вы снова захотите, чтобы обратно просто откат.

Ответ 5

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

Перед созданием ваших миграций создайте разные каталоги:

    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

Использование этих методов позволит вам больше гибкости и контроля над вашей базой данных и любыми изменениями, внесенными в вашу схему.

Ответ 6

лучше использовать обновить миграцию

Вы можете откатить & повторно мигрировать ограниченное количество миграций предоставление опции шага для команды обновления. Например, следующая команда выполнит откат & повторно перенести последние две миграции:

php artisan migrate:refresh --step=2

в противном случае используется откат миграции

Вы можете откатить ограниченное количество миграций, предоставив шаг вариант команды отката. Например, следующая команда выполнит откат трех последних миграций:

php artisan migrate:rollback --step=3

подробнее о миграции см.

Ответ 7

Откат на один шаг. Врожденная.

php artisan migrate:rollback --step=1

Откат на два шага. Врожденная.

php artisan migrate:rollback --step=2

Ответ 8

Используйте команду "php artisan migrate: rollback --step = 1" для отката миграции на 1 шаг назад.

Для получения дополнительной информации проверьте ссылку: - https://laravel.com/docs/master/migrations#running-migrations

Ответ 9

Перенесите таблицы один за другим.

Измените номер партии миграции, которую вы хотите откат, до самого высокого.

Запустить миграцию: откат.

Не может быть самым удобным способом решения крупных проектов.

Ответ 10

Если вы хотите изменить исходный файл миграции и перенести его снова, вы можете использовать этот пакет для миграции. (Применимо к Laravel 5.4 или более поздней версии)

Сначала установите пакет в ваш проект Laravel:

composer require caloskao/migrate-specific

Зарегистрируйте команду в app/Console/Kernel.php:

protected $commands = [
    \CalosKao\MigrateSpecific::class
];

Теперь запустите эту команду, чтобы перенести файл

php artisan migrate:specific database/migrations/table.php

Ответ 11

INSERT INTO homestead.bb_migrations (`migration`, `batch`)  VALUES ('2016_01_21_064436_create_victory_point_balance_table', '2')

что-то вроде этого

Ответ 12

1.) Внутри базы данных перейдите к таблице миграции и удалите запись миграции, относящуюся к таблице, которую вы хотите удалить.

Пример изображения таблицы миграции

2.) Затем удалите таблицу, связанную с миграцией, которую вы только что удалили из инструкции 1.

Удалить пример изображения таблицы

3.) Наконец, внесите необходимые изменения в файл миграции таблицы, которую вы удалили из инструкции №. 2 затем запустите php artisan migrate чтобы перенастроить таблицу снова.

Ответ 13

В качестве указанного в руководстве Laravel, вы можете откатить определенное количество миграций с помощью параметра --step

php artisan migrate:rollback --step=5

Ответ 14

Лучший способ - создать новую миграцию и внести в нее необходимые изменения.

В худшем случае (если у вас есть доступ к БД и у вас все в порядке с СБРОСОМ этих данных таблицы):

  1. Перейдите в БД и удалите/переименуйте запись миграции для your-specific-migration
  2. Удалите таблицу, созданную your-specific-migration
  3. Запустите php artisan migrate --path=/database/migrations/your-specific-migration.php

Это заставит laravel выполнить эту конкретную миграцию, так как в истории миграции Laravel нет записи об этом