새로운 Migration 은 artisan make:migration 명령을 통해서 만들 수 있습니다. 


$ php artisan make:migration -h
 
Usage:
  make:migration [options] [--] <name>
Arguments:
  name                   The name of the migration
Options:
      --create[=CREATE]  The table to be created.
      --table[=TABLE]    The table to migrate.
BASH

--create 옵션은 migration 시 테이블을 생성할 지 여부를 결정하고 --table 은 기존 스키마를 변경할 경우 사용하며 관련된 테이블을 지정합니다.

그러면 일정 관리 애플리케이션을 만들기 위해 projects와 Tasks 두 개의 테이블을 설계해 봅시다. 모든 Task 는 Project 에 속하고 있으며 데이타 베이스의 스키마 구조는 아래 그림과 같습니다.


이제 projects 테이블을 생성하는 migration 을 생성해 보겠습니다.

$ php artisan make:migration create_project_table --create=projects
Created Migration: 2015_07_05_022234_create_project_table
BASH

migration 이름은 create_project_table 이며 테이블이 없으므로 생성하기 위해 --create 옵션을 사용하고 테이블명을 지정했습니다.

migration 이름은 어떤 작업인지 알수 있도록 기술해 주는 것이 좋으며 여러 단어를 사용할 경우 공백없이 언더바(_) 를 사용하는 것이 관례입니다.


이제 할 일을 저장하는 테이블인 Tasks 를 만드는 migration 을 생성해 봅시다.

$ php artisan make:migration create_task_table --create=tasks
Created Migration: 2015_07_05_022752_create_task_table
BASH


생성된 파일은 database/migrations/ 폴더 밑에 생성되며 위의 경우 2015_07_05_022234_create_project_table.php과  2015_07_05_022752_create_task_table.php 파일이 생성됩니다.

이제 에디터로 파일을 열어 보면 다음과 같이 Migration 클래스를 상속받고 up 과 down 메소드가 있는 것을 확인할 수 있습니다.

2015_07_05_022234_create_project_table.php

class CreateProjectTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('projects', function (Blueprint $table) {
            $table->increments('id');
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('projects');
    }
}
PHP

up은 migration 을 적용할 때 수행되는 메소드며 down() 은 롤백(rollback) 할 경우 수행되는 메소드이므로 두 개의 메소드는 쌍을 맞춰서 주어야 합니다.

예로 up() 에서 테이블을 생성했으므로 down() 에서는 테이블을 삭제해 주어야 합니다.