마이그레이션 Migrations Class¶
마이그레이션을 통해서 쉽고 안정적으로 데이터베이스를 변경(alter) 할 수 있습니다. 수작업으로 sql을 만들 수도 있지만, 그럴 경우 어떤 것이 변경되었는지, 다음 배포때는 어떤것이 수행되어야하는지, 기억하고 있어야 합니다.
데이터베이스 테이블 마이그레이션 (migration) 은 어떤 마이그레이션이 수행되었는지 지속적으로 추적해 주기 때문에, 개발자는 단지 프로그램 파일을 업데이트 하고 $this->migration->current() 만 호출하면,배포에 필요한 마이그레이션이 수행됩니다.현재 버전은 application/config/migration.php 에 있습니다.
마이그레이션 파일명 Migration file names¶
각 마이그레이션은 숫자 순서대로 앞으로 또는 뒤로 실행합니다. 두 가지 번호 스타일을 사용할 수 있습니다:
- 순차적 Sequential: 각 마이그레이션을 할 때 001 부터 순차적으로 번호가 생성됩니다. 각 번호는 3자리이며, 숫자 중간에 어떤 틈도 없습니다.
- 타임스탬프 Timestamp: 각 마이그레이션 할 때 마이그레이션 타임 스탬프를 사용하여 YYYYMMDDHHIISS와 같은 형식으로 번호가 생성됩니다. format (e.g. 20121031100537). 이것은 팀 환경에서 작업 번호 충돌을 방지하는 데 도움이 됩니다.
application/config/migration.php 파일 안에서 $config['migration_type'] 를 사용해 원하는 스타일을 고를 수 있습니다.
어떤 넘버링 스타일을 사용하기로 결정하였던지, 넘버링되는 마이그레이션 파일 접두사는 언더스코어로 연결됩니다. 예제:
- 001_add_blog.php (순차적 넘버링)
- 20121031100537_add_blog.php (타임스탬프 넘버링)
마이그레이션 생성 Create a Migration¶
블로그를 포함하고 있는 새 사이트의 첫 번째 마이그레이션 일 경우입니다. 모든 마이그레이션은 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'] = 1; 으로 설정합니다.
사용 예제 Usage Example¶
예제에서 사용되는 코드는 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 Preferences¶
다음은 마이그레이션에 대한 모든 구성 옵션의 테이블.
설정 | 기본값 | 옵션 | 설명 |
---|---|---|---|
migration_enabled | FALSE | TRUE / FALSE | 마이그레이션 사용/비사용 설정 |
migration_path | APPPATH.’migrations/’ | None | 마이그레이션 폴더 경로. |
migration_version | 0 | None | 데이터베이스가 사용하고 있는 현재버전. |
migration_table | migrations | None | 스키마를 저장하기위한 테이블명, 버전 번호. |
migration_auto_latest | FALSE | TRUE / FALSE | 마이그레이션 자동실행 활성화/비활성화 |
migration_type | ‘timestamp’ | ‘timestamp’ / ‘sequential’ | 마이그레이션 파일 이름에 사용되는 숫자 식별자의 유형. |
클래스 레퍼런스 Class Reference¶
- class CI_Migration¶
- current()¶
반환값: TRUE if no migrations are found, current version string on success, FALSE on failure 반환형: mixed application/config/migration.php 에 있는 $config['migration_version'] 에 설정된 현재버전.
- error_string()¶
반환값: Error messages 반환형: string 이 마이그레이션을 수행하는 동안 발견 된 오류 문자열을 반환.
- find_migrations()¶
반환값: An array of migration files 반환형: 배열(array) 마이그레이션 파일 이름의 배열 migration_path에서 발견되면 반환됩니다.
- latest()¶
반환값: TRUE if no migrations are found, current version string on success, FALSE on failure 반환형: mixed current() 와 매우 비슷하게 작동합니다. 그러나 $config['migration_version'] 를 찾는 대신 마이그레이션 클래스는 파일 시스템에서 발견된 가장 최근의 마이그레이션 파일을 사용할 것입니다.
- version($target_version)¶
인수: - $target_version (mixed) – Migration version to process
반환값: TRUE if no migrations are found, current version string on success, FALSE on failure
반환형: mixed
버전은 롤백을 위해 사용될 수 있습니다. 또는 특정 버전으로 프로그래밍적으로 이동할 수 있게 합니다. 이것은 current() 처럼 작동하나, $config['migration_version']는 무시합니다.
$this->migration->version(5);