마이그레이션 클래스

마이그레이션은 구조적이고 체계적인 방식으로 데이터베이스를 변경하는 편리한 방법입니다. SQL 단편을 직접 편집할 수 있지만 그러면 다른 개발자들에게 실행해야 한다고 알려야 하는 책임이 생깁니다. 또한 다음에 배포할 때 프로덕션 서버에 어떤 변경 사항을 적용해야 하는지 추적해야 합니다.

데이터베이스 테이블 migration은 이미 실행된 마이그레이션을 추적하므로 애플리케이션 파일을 업데이트하고 $this->migration->current()를 호출하여 어떤 마이그레이션을 실행해야 하는지 파악하기만 하면 됩니다. 현재 버전은 application/config/migration.php에 있습니다.

마이그레이션 파일 이름

각 마이그레이션은 사용하는 방법에 따라 순방향 또는 역방향으로 숫자 순서대로 실행됩니다. 두 가지 번호 매기기 방식이 사용 가능합니다:

  • 순차 방식: 각 마이그레이션은 001부터 시작하여 순차적으로 번호가 매겨집니다. 각 숫자는 세 자리여야 하며 순서에 공백이 없어야 합니다. (이것은 CodeIgniter 3.0 이전의 번호 매기기 방식이었습니다.)

  • 타임스탬프 방식: 각 마이그레이션은 마이그레이션이 생성될 때의 타임스탬프를 사용하여 YYYYMMDDHHIISS 형식(예: 20121031100537)으로 번호가 매겨집니다. 이는 팀 환경에서 작업할 때 번호 충돌을 방지하는 데 도움이 되며 CodeIgniter 3.0 이후의 권장 방식입니다.

원하는 방식은 application/config/migration.php 파일의 $config['migration_type'] 설정을 사용하여 선택할 수 있습니다.

어떤 번호 매기기 방식을 선택하든 마이그레이션 파일의 앞에 마이그레이션 번호, 언더스코어, 그리고 마이그레이션에 대한 설명적인 이름을 붙이세요. 예를 들어:

  • 001_add_blog.php (순차 번호 매기기)

  • 20121031100537_add_blog.php (타임스탬프 번호 매기기)

마이그레이션 생성

이것은 블로그가 있는 새 사이트의 첫 번째 마이그레이션입니다. 모든 마이그레이션은 application/migrations/ 디렉터리에 있으며 20121031100537_add_blog.php와 같은 이름을 갖습니다.

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Migration_Add_blog extends CI_Migration {

        public function up()
        {
                $this->dbforge->add_field(array(
                        'blog_id' => array(
                                'type' => 'INT',
                                'constraint' => 5,
                                'unsigned' => TRUE,
                                'auto_increment' => TRUE
                        ),
                        'blog_title' => array(
                                'type' => 'VARCHAR',
                                'constraint' => '100',
                        ),
                        'blog_description' => array(
                                'type' => 'TEXT',
                                'null' => TRUE,
                        ),
                ));
                $this->dbforge->add_key('blog_id', TRUE);
                $this->dbforge->create_table('blog');
        }

        public function down()
        {
                $this->dbforge->drop_table('blog');
        }
}

그런 다음 application/config/migration.php에서 $config['migration_version'] = 20121031100537;을 설정합니다.

사용 예시

이 예시에서는 스키마를 업데이트하기 위해 application/controllers/Migrate.php에 간단한 코드가 배치됩니다:

<?php

class Migrate extends CI_Controller
{

        public function index()
        {
                $this->load->library('migration');

                if ($this->migration->current() === FALSE)
                {
                        show_error($this->migration->error_string());
                }
        }

}

마이그레이션 설정

다음은 마이그레이션의 모든 설정 옵션 표입니다.

설정

기본값

옵션

설명

migration_enabled

FALSE

TRUE / FALSE

마이그레이션을 활성화하거나 비활성화합니다.

migration_path

APPPATH.’migrations/’

없음

마이그레이션 폴더 경로입니다.

migration_version

0

없음

데이터베이스가 사용해야 하는 현재 버전입니다.

migration_table

migrations

없음

스키마 버전 번호를 저장하는 테이블 이름입니다.

migration_auto_latest

FALSE

TRUE / FALSE

마이그레이션 자동 실행을 활성화하거나 비활성화합니다.

migration_type

‘timestamp’

‘timestamp’ / ‘sequential’

마이그레이션 파일 이름에 사용되는 숫자 식별자 유형입니다.

클래스 레퍼런스

class CI_Migration
current()
반환:

마이그레이션을 찾을 수 없으면 TRUE, 성공 시 현재 버전 문자열, 실패 시 FALSE

반환 형식:

mixed

현재 버전까지 마이그레이션합니다(application/config/migration.php$config['migration_version']에 설정된 것).

error_string()
반환:

오류 메시지

반환 형식:

string

마이그레이션 수행 중 감지된 오류 문자열을 반환합니다.

find_migrations()
반환:

마이그레이션 파일 배열

반환 형식:

array

migration_path 속성에서 찾은 마이그레이션 파일 이름의 배열을 반환합니다.

latest()
반환:

성공 시 현재 버전 문자열, 실패 시 FALSE

반환 형식:

mixed

current()와 거의 동일하게 작동하지만 $config['migration_version']을 찾는 대신 Migration 클래스는 파일 시스템에서 찾은 가장 최신 마이그레이션을 사용합니다.

version($target_version)
매개변수:
  • $target_version (mixed) – 처리할 마이그레이션 버전

반환:

마이그레이션을 찾을 수 없으면 TRUE, 성공 시 현재 버전 문자열, 실패 시 FALSE

반환 형식:

mixed

변경 사항을 롤백하거나 프로그래밍 방식으로 특정 버전으로 앞으로 이동하는 데 사용할 수 있습니다. current()처럼 작동하지만 $config['migration_version']을 무시합니다.

$this->migration->version(5);