애플리케이션이 변경할 경우 스키마도 같이 변경해야 하는 경우가 많으며 특히 초기 개발시에 자주 발생하는 작업입니다.

라라벨 migration 은 스키마의 버전 관리가 가능하므로 잦은 변경이 발생할 때 유리합니다.

 

Projects 테이블에 프로젝트를 구분하기 위한 새로운 컬럼인 label 이 추가될 경우 다음과 같은 절차에 따라 작업이 이루어 집니다.

 

migration 생성

make:migration 명령어로 새로운 마이그레이션을 생성하며 이름은 나중에 알아보기 쉽게 스키마 변경을 상세하게 적어줍니다. 기존 스키마 변경이므로 --create 옵션 대신 --table 옵션으로 대상이 되는 테이블 이름을 지정합니다.

$ php artisan make:migration add_label_column_to_project_table --table=projects
Created Migration: 2015_07_20_034902_add_label_column_to_project_table
CODE

파일(2015_07_20_034902_add_label_column_to_project_table)이 생성되었고 마이그레이션 클래스는 작업명인 add_label_column_to_project_table 를 studly_case() 헬퍼 메소드를 사용하여 StudlyCase 로 변환한 이름인 AddLabelColumnToProjectTable 입니다.

php artisan tinker 를 사용하여 간단하게 생성되는 클래스 파일명을 확인할 수 있습니다.

 

>>> studly_case('add_label_column_to_project_table')
=> "AddLabelColumnToProjectTable"

 

 

이제 마이그레이션 파일을 열어서 migrate 를 수행하는 up() 메소드에 다음과 같이 새로운 컬럼 이름과 유형을 정의합니다.

public function up()
{
    Schema::table('projects', function (Blueprint $table) {
         $table->string('label', 50);
    });
}
CODE

 

migrate:reset 은 추가된 컬럼을 제거해야 하므로 down() 메소드에서는 dropColumn() 으로 label 컬럼을 제거합니다.

public function down()
{
    Schema::table('projects', function (Blueprint $table) {
        $table->dropColumn('label');
    });
}
CODE

 

이제 다음 명령어를 실행하면 변경된 스키마를 마이그레이션하여 새로운 스키마를 반영하며 변경된 스키마는 데이타베이스 브라우저를 사용하여 확인할 수 있습니다.

$ php artisan migrate
CODE