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_enabled | FALSE | TRUE / FALSE | Włącza lub wyłącza migracje. |
migration_version | 0 | None | Określa wersję do której powinna być zsynchronizowana baza danych. |
migration_path | APPPATH.'migrations/' | None | Ścieżka do folderu z migracjami. |