[laravel] 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_directoriescontacts의도 와 내 테이블 모두 나는 그런 일이 일어나기를 원하지 않으며, 그 특정한 일만 롤백 할 수 있다면이 재난은 결코 일어나지 않을 것입니다.



답변

migrations표 를 살펴보면 각 마이그레이션에 배치 번호가 있음을 알 수 있습니다. 따라서 롤백 할 때 마지막 배치의 일부인 각 마이그레이션을 롤백합니다.

마지막 마이그레이션 만 롤백하려면 배치 번호를 1 씩 늘리십시오. 그런 다음 다음에 rollback명령 을 실행할 때 자체 “일괄 처리”에있는 한 번의 마이그레이션 만 롤백합니다.


답변

라 라벨 5.3+

한 단계 롤백. 기본적으로.

php artisan migrate:rollback --step=1

다음은 매뉴얼 페이지입니다. docs .


라 라벨 5.2 이전

번거 로움 없이는 할 수 없습니다. 자세한 내용은 Martin Bean의 답변을 확인하십시오 .


답변

롤백 할 때마다 마지막 마이그레이션 배치를 얻습니다. 명령을 사용

php artisan migrate:rollback --step=1


답변

@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');
    });
}

그런 다음 마이그레이션을 실행하면 테이블이 삭제됩니다. 다시 되돌리려면 롤백하십시오.


답변

새로 고침 마이그레이션 을 사용하는 것이 좋습니다

단계 옵션을 refresh 명령에 제공하여 제한된 수의 마이그레이션을 롤백 및 다시 마이그레이션 할 수 있습니다. 예를 들어 다음 명령은 마지막 두 마이그레이션을 롤백하고 다시 마이그레이션합니다.

php artisan migrate:refresh --step=2

그렇지 않으면 사용 된 롤백 마이그레이션

롤백 명령에 단계 옵션을 제공하여 제한된 수의 마이그레이션을 롤백 할 수 있습니다. 예를 들어 다음 명령은 마지막 세 가지 마이그레이션을 롤백합니다.

php artisan migrate:rollback --step=3

마이그레이션에 대한 자세한 내용


답변

가장 좋은 방법은 새로운 마이그레이션을 생성하고 필요한 변경을 수행하는 것입니다.

최악의 경우는 해결 ( 경우에 당신은 DB에 액세스 할 수 플러스 당신이 그 테이블의 데이터의 RESET과 괜찮아 ) :

  1. DB로 이동 하여 마이그레이션 항목 삭제 / 이름 바꾸기your-specific-migration
  2. 만든 테이블을 삭제your-specific-migration
  3. 운영 php artisan migrate --path=/database/migrations/your-specific-migration.php

Laravel의 마이그레이션 기록에 항목이 없기 때문에 laravel이 특정 마이그레이션을 강제로 실행합니다.

업데이트 : Laravel 방식 (감사합니다, @ thiago-valente)

운영:

php artisan migrate:rollback --path=/database/migrations/your-specific-migration.php

그리고:

php artisan migrate

이 특정 마이그레이션을 다시 실행합니다


답변

이 질문에 대답하는 데 약간 늦을 수 있지만 여기에 내가 생각하는 아주 좋고 깨끗하며 효율적인 방법이 있습니다. 최대한 철저하게 노력하겠습니다.

마이그레이션을 작성하기 전에 다음과 같이 다른 디렉토리를 작성하십시오.

    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

이러한 기술을 사용하면 데이터베이스 및 스키마에 대한 수정 사항을보다 유연하게 제어 할 수 있습니다.