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. |