Podręcznik użytkownika CodeIgniter wersja 2.2.1


Klasa Migration

Migracje są wygodnym sposobem na to, aby wprowadzać zmiany w bazie danych w zorganizowany sposób. Mógłbyś ręcznie edytować fragmenty kodu SQL, ale byłbyś wtedy też odpowiedzialny za powiadomienie innych developerów o zaistniałych zmianach. Musiałbyś również śledzić zmiany jakie muszą zostać wprowadzone na serwerze produkcyjnym, podczas wprowadzania nowej wersji aplikacji (lub poprawek).

Tabela w bazie danych o nazwie migration, śledzi które migracje zostały już uruchomione, więc wszystko co musisz zrobić, to wgranie zmienionych plików na serwer oraz uruchomienie funkcji $this->migrate->current(), aby zobaczyć, które migracje powinny być uruchomione. Aktualna wersja migracji dla aplikacji jest zapisana w pliku config/migration.php.

Tworzenie migracji

To będzie pierwsza migracja dla strony, która posiada blog. Wszystkie migracje znajdują się w folderze application/migrations/ i mają nazwy w postaci: 001_add_blog.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->create_table('blog');
	}

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

W pliku application/config/migration.php ustaw $config['migration_version'] = 1;.

Przykład użycia

W tym przykładzie, umieszczono prosty kawałek kodu w pliku application/controllers/migrate.php, aby zmienić schemat bazy.

$this->load->library('migration');

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

Opis funkcji

$this->migration->current()

Zwraca wartość ustawioną w pliku application/config/migration.php dla zmiennej $config['migration_version'].

$this->migration->latest()

Działa w ten sam sposób jak funkcja current(), ale zamiast szukać zmiennej $config['migration_version'], klasa wykona najnowsze dostępne w aplikacji migracje.

$this->migration->version()

Funkcja może być użyta, aby cofnąć wprowadzone zmiany w bazie danych. Można cofnąć się do określonej wersji.

$this->load->library('migration');

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

Preferencje migracji

Poniżej znajduje się pełna lista opcji konfiguracyjnych dla migracji.

Preferencja Domyślna wartość Opcje Opis
migration_enabledFALSETRUE / FALSEWłącza lub wyłącza migracje.
migration_version0NoneOkreśla wersję do której powinna być zsynchronizowana baza danych.
migration_pathAPPPATH.'migrations/'NoneŚcieżka do folderu z migracjami.