Database Forge 클래스

Database Forge 클래스에는 데이터베이스 관리에 도움이되는 메소드가 포함되어 있습니다.

Forge 클래스 초기화

Important

Forge 클래스는 데이터베이스 드라이버에 의존하므로 Forge 클래스를 초기화하려면 데이터베이스 드라이버가 이미 실행 중이어야 합니다.

다음과 같이 Forge 클래스를 로드합니다.

$forge = \Config\Database::forge();

관리하려는 데이터베이스가 기본 데이터베이스가 아닌 경우 다른 데이터베이스 그룹 이름을 DB Forge 로더에 전달할 수 있습니다.

$this->myforge = \Config\Database::forge('other_db');

위의 예처럼 매개 변수로 연결할 다른 데이터베이스 그룹의 이름을 전달합니다.

데이터베이스 생성 및 삭제

$forge->createDatabase(‘db_name’)

첫 번째 매개 변수로 지정된 데이터베이스를 생성합니다. 성공 또는 실패에 따라 TRUE/FALSE를 반환합니다.

if ($forge->createDatabase('my_db'))
{
        echo 'Database created!';
}

$forge->dropDatabase(‘db_name’)

첫 번째 매개 변수로 지정된 데이터베이스를 삭제합니다. 성공 또는 실패에 따라 TRUE/FALSE를 반환합니다.

if ($forge->dropDatabase('my_db'))
{
        echo 'Database deleted!';
}

테이블 생성 및 삭제

테이블을 만들때 수행할 수 있는 작업이 몇 가지 있습니다. 필드를 추가, 테이블에 키를 추가, 컬럼 변경. CodeIgniter는 이를 위한 메커니즘을 제공합니다.

필드 추가

필드는 일반적으로 연관 배열을 통해 생성됩니다. 배열 내에 필드의 데이터 유형과 관련된 ‘type’ 키를 포함해야 합니다. 예를 들면 INT, VARCHAR, TEXT 등입니다. 많은 데이터 유형(예 : VARCHAR)에 ‘constraint’ 키가 필요합니다.

$fields = [
        'users' => [
                'type'       => 'VARCHAR',
                'constraint' => 100,
        ],
];
// will translate to "users VARCHAR(100)" when the field is added.

또한 다음 키/값을 사용할 수 있습니다:

  • unsigned/true : 필드 정의에서 “UNSIGNED”를 생성합니다.
  • default/value : 필드 정의에서 기본값을 생성합니다.
  • null/true : 필드 정의에서 “NULL”을 생성합니다. 이 옵션이 없으면 필드는 기본적으로 “NOT NULL”이 됩니다.
  • auto_increment/true : 필드에 auto_increment 플래그를 생성합니다. 필드 유형은 정수와 같이 이를 지원하는 유형이어야합니다.
  • unique/true : 필드 정의를 위한 고유 키를 생성합니다.
$fields = [
        'id'          => [
                'type'           => 'INT',
                'constraint'     => 5,
                'unsigned'       => true,
                'auto_increment' => true
        ],
        'title'       => [
                'type'           => 'VARCHAR',
                'constraint'     => '100',
                'unique'         => true,
        ],
        'author'      => [
                'type'           =>'VARCHAR',
                'constraint'     => 100,
                'default'        => 'King of Town',
        ],
        'description' => [
                'type'           => 'TEXT',
                'null'           => true,
        ],
        'status'      => [
                'type'           => 'ENUM',
                'constraint'     => ['publish', 'pending', 'draft'],
                'default'        => 'pending',
        ],
];

필드가 정의 된 후 $forge->addField($ fields);를 사용하여 추가하고 createTable() 메소드를 호출합니다.

$forge->addField()

필드 추가 메소드는 위의 배열을 승인합니다.

문자열을 필드로 전달

필드 생성 방법을 정확히 알고 있다면 addField()를 사용하여 필드 정의에 문자열을 전달할 수 있습니다.

$forge->addField("label varchar(100) NOT NULL DEFAULT 'default label'");

Note

문자열을 필드로 전달한 후에는 해당 필드에서 addKey() 호출을 수행 할 수 없습니다.

Note

addField()를 여러 번 호출하면 누적됩니다.

id 필드 만들기

id 필드는 만들때 특별한 예외가 적용됩니다. 유형이 id 인 필드는 자동으로 INT(9) auto_incrementing Primary 키로 할당됩니다.

$forge->addField('id');
// gives id INT(9) NOT NULL AUTO_INCREMENT

키 추가

일반적으로 테이블에 키가 필요합니다. 이것은 $forge->addKey( ‘field’)로 추가합니다. 선택 사항인 두 번째 매개 변수를 TRUE로 설정하면 기본(Primary) 키가 되고 세 번째 매개 변수가 TRUE로 설정되면 고유(Unique) 키가 됩니다. addKey() 다음에 createTable()을 호출해야 합니다.

기본 키가 아닌 경우 여러 컬럼을 혼합하여 키를 만들 때는 배열로 보내야 합니다. 아래 샘플 출력은 MySQL 용입니다.

$forge->addKey('blog_id', TRUE);
// gives PRIMARY KEY `blog_id` (`blog_id`)

$forge->addKey('blog_id', TRUE);
$forge->addKey('site_id', TRUE);
// gives PRIMARY KEY `blog_id_site_id` (`blog_id`, `site_id`)

$forge->addKey('blog_name');
// gives KEY `blog_name` (`blog_name`)

$forge->addKey(['blog_name', 'blog_label']);
// gives KEY `blog_name_blog_label` (`blog_name`, `blog_label`)

$forge->addKey(['blog_id', 'uri'], FALSE, TRUE);
// gives UNIQUE KEY `blog_id_uri` (`blog_id`, `uri`)

코드를 보다 객관적으로 만들려면 특정 메소드로 기본 및 고유 키를 추가할 수 있습니다

$forge->addPrimaryKey('blog_id');
// gives PRIMARY KEY `blog_id` (`blog_id`)

$forge->addUniqueKey(['blog_id', 'uri']);
// gives UNIQUE KEY `blog_id_uri` (`blog_id`, `uri`)

외래(Foreign) 키 추가

외래 키는 테이블 전체에서 관계 및 작업을 시행하는 데 도움이됩니다. 외래 키를 지원하는 테이블의 경우 forge에서 직접 추가 할 수 있습니다

$forge->addForeignKey('users_id','users','id');
// gives CONSTRAINT `TABLENAME_users_foreign` FOREIGN KEY(`users_id`) REFERENCES `users`(`id`)

구속 조건의 “on delete” 및 “on update” 속성에 대해 원하는 작업을 지정할 수 있습니다.

$forge->addForeignKey('users_id','users','id','CASCADE','CASCADE');
// gives CONSTRAINT `TABLENAME_users_foreign` FOREIGN KEY(`users_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE

테이블 만들기

필드와 키가 선언되면 다음과 같이 새 테이블을 만들 수 있습니다.

$forge->createTable('table_name');
// gives CREATE TABLE table_name

선택적으로 두 번째 매개 변수를 TRUE로 설정하면 “IF NOT EXISTS”절이 정의에 추가됩니다.

$forge->createTable('table_name', TRUE);
// gives CREATE TABLE IF NOT EXISTS table_name

MySQL의``ENGINE``과 같은 선택적 테이블 속성을 전달할 수 있습니다.

$attributes = ['ENGINE' => 'InnoDB'];
$forge->createTable('table_name', FALSE, $attributes);
// produces: CREATE TABLE `table_name` (...) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

Note

CHARACTER SET 또는 COLLATE 속성을 지정하지 않으면 createTable()은 미리 구성된 charsetDBCollat 값을 추가합니다. (MySQL 만 해당).

테이블 삭제

DROP TABLE 문을 실행하고 옵션으로 IF EXISTS 절을 추가합니다.

// Produces: DROP TABLE table_name
$forge->dropTable('table_name');

// Produces: DROP TABLE IF EXISTS table_name
$forge->dropTable('table_name',TRUE);

외래 키 삭제

DROP FOREIGN KEY 문을 실행합니다.

// Produces: ALTER TABLE 'tablename' DROP FOREIGN KEY 'users_foreign'
$forge->dropForeignKey('tablename','users_foreign');

테이블 이름 바꾸기

TABLE rename 문을 실행합니다.

$forge->renameTable('old_table_name', 'new_table_name');
// gives ALTER TABLE old_table_name RENAME TO new_table_name

테이블 수정

테이블에 컬럼 추가

$forge->addColumn()

addColumn() 메소드는 기존 테이블을 수정하는데 사용됩니다. 위와 동일한 필드 배열을 허용하며 추가 필드를 무제한으로 사용할 수 있습니다.

$fields = [
        'preferences' => ['type' => 'TEXT']
];
$forge->addColumn('table_name', $fields);
// Executes: ALTER TABLE table_name ADD preferences TEXT

MySQL 또는 CUBIRD를 사용하는 경우 AFTER 및 FIRST 절을 활용하여 새 컬럼을 배치할 수 있습니다.

// Will place the new column after the `another_field` column:
$fields = [
        'preferences' => ['type' => 'TEXT', 'after' => 'another_field']
];

// Will place the new column at the start of the table definition:
$fields = [
        'preferences' => ['type' => 'TEXT', 'first' => TRUE]
];

테이블의 컬럼 삭제

$forge->dropColumn()

테이블에서 컬럼을 제거하는 데 사용됩니다.

$forge->dropColumn('table_name', 'column_to_drop');

테이블의 컬럼 수정

$forge->modifyColumn()

이 메소드의 사용법은 addColumn()과 동일하지만 새 컬럼을 추가하는 대신 기존 컬럼을 변경한다는 점이 다릅니다. 이름을 변경하기 위해 필드 정의 배열에 “name” 키를 추가할 수 있습니다.

$fields = [
        'old_name' => [
                'name' => 'new_name',
                'type' => 'TEXT',
        ],
];
$forge->modifyColumn('table_name', $fields);
// gives ALTER TABLE table_name CHANGE old_name new_name TEXT

Class Reference

class CodeIgniterDatabaseForge
addColumn($table[, $field = []])
Parameters:
  • $table (string) – 컬럼을 추가 할 테이블 이름
  • $field (array) – 컬럼 정의
Returns:

TRUE면 성공, FALSE면 실패

Return type:

bool

테이블에 컬럼을 추가합니다. 사용법: 테이블에 컬럼 추가.

addField($field)
Parameters:
  • $field (array) – 추가 할 필드 정의
Returns:

CodeIgniterDatabaseForge instance (method chaining)

Return type:

CodeIgniterDatabaseForge

테이블을 만드는데 사용될 필드를 세트에 추가합니다. 사용법: 필드 추가.

addKey($key[, $primary = FALSE[, $unique = FALSE]])
Parameters:
  • $key (mixed) – 키 필드 또는 필드 배열의 이름
  • $primary (bool) – 기본(Primary) 키여야 하는 경우 TRUE로 설정
  • $unique (bool) – 고유(Unique) 키여야 하는 경우 TRUE로 설정
Returns:

CodeIgniterDatabaseForge instance (method chaining)

Return type:

CodeIgniterDatabaseForge

테이블 작성할 때 사용될 키를 세트에 추가합니다. 사용법: 키 추가.

addPrimaryKey($key)
Parameters:
  • $key (mixed) – 키 필드 또는 필드 배열의 이름
Returns:

CodeIgniterDatabaseForge instance (method chaining)

Return type:

CodeIgniterDatabaseForge

테이블 작성할 때 사용될 기본 키를 세트에 추가합니다. 사용법: 키 추가.

addUniqueKey($key)
Parameters:
  • $key (mixed) – 키 필드 또는 필드 배열의 이름
Returns:

CodeIgniterDatabaseForge instance (method chaining)

Return type:

CodeIgniterDatabaseForge

테이블 작성할 때 사용될 고유 키를 세트에 추가합니다. 사용법: 키 추가.

createDatabase($db_name)
Parameters:
  • $db_name (string) – 생성할 데이터베이스 이름
Returns:

TRUE면 성공, FALSE면 실패

Return type:

bool

새로운 데이터베이스를 생성합니다. 사용법: 데이터베이스 생성 및 삭제.

createTable($table[, $if_not_exists = FALSE[, array $attributes = []]])
Parameters:
  • $table (string) – 생성할 테이블 이름
  • $if_not_exists (string) – ‘IF NOT EXISTS’ 절을 추가하려면 TRUE로 설정
  • $attributes (string) – 테이블 속성의 연관 배열
Returns:

Query 객체면 성공, FALSE면 실패

Return type:

mixed

새로운 테이블을 생성합니다. 사용법: 테이블 만들기.

dropColumn($table, $column_name)
Parameters:
  • $table (string) – 테이블 이름
  • $column_name (array) – 제거할 컬럼 이름
Returns:

TRUE면 성공, FALSE면 실패

Return type:

bool

테이블에서 컬럼을 제거합니다.. 사용법: 테이블의 컬럼 삭제.

dropDatabase($db_name)
Parameters:
  • $db_name (string) – 제거할 데이터베이스 이름
Returns:

TRUE면 성공, FALSE면 실패

Return type:

bool

데이터베이스를 제거합니다. 사용법: 데이터베이스 생성 및 삭제.

dropTable($table_name[, $if_exists = FALSE])
Parameters:
  • $table (string) – 제거할 테이블 이름
  • $if_exists (string) – ‘IF EXISTS’ 절을 추가하려면 TRUE로 설정
Returns:

TRUE면 성공, FALSE면 실패

Return type:

bool

테이블을 제거합니다.. 사용법: 테이블 삭제.

modifyColumn($table, $field)
Parameters:
  • $table (string) – 테이블 이름
  • $field (array) – 컬럼 정의
Returns:

TRUE면 성공, FALSE면 실패

Return type:

bool

테이블의 컬럼을 수정합니다. 사용법: 테이블의 컬럼 수정.

renameTable($table_name, $new_table_name)
Parameters:
  • $table (string) – 테이블 이름
  • $new_table_name (string) – 테이블의 새로운 이름
Returns:

Query 객체면 성공, FALSE면 실패

Return type:

mixed

테이블 이름을 바꿉니다. 사용법: 테이블 이름 바꾸기.