마이그레이션 클래스¶
마이그레이션은 구조적이고 체계적인 방식으로 데이터베이스를 변경하는 편리한 방법입니다. 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);