Класс миграций 

Миграции представляют собой удобный способ изменить вашу базу данных в структурированный и организованный стиль. Вы можете редактировать фрагменты SQL вручную, но вы потом несете ответственность за озвучивание изменений другим разработчикам, что они должны выполнить их. Вы также должны следить за тем, какие изменения необходимо выполнить в производстве, чтобы в следующий раз могли использовать.

В таблице базы данных миграции отмечено какие миграции были уже выполнены, поэтому все, что вам нужно сделать, это обновить файлы приложения и вызвать $this->migration->current() чтобы узнать, с какой миграций должны выполняться. Текущая версия находится в application/config/migration.php.

Миграция имен файлов 

Каждая миграция выполняется в числовом порядке, вперед или назад в зависимости от выбранного способа. Допускается двойная нумерация:

  • Последовательный: каждая миграция нумеруется в последовательности начиная с 001. Каждый номер дрлжен быть трехзначным и здесь не должно быть каких-либо пробелов в последовательности. (Это была схема нумерации до CodeIgniter 3.0.)
  • Отметка времени: каждая миграция пронумерована используя метку времени когда миграция была создана, в ГГГГММДДЧЧММСС формате (т.е. 20121031100537). Это помогает предотвратить конфликты нумерации при работе в команде, и является предпочтительной схемой в CodeIgniter 3.0 и выше.

Желаемый стиль может быть выбран с помощью $config['migration_type'] указанным в application/config/migration.php файле.

Независимо от того, какой стиль нумерации вы решите использовать, используйте префикс в имени файла миграции перед числом, за которым следует символ подчеркивания и описательное имя для миграции. For example:

  • 001_add_blog.php (последовательная нумерация)
  • 20121031100537_add_blog.php (нумерация отметкой временем)

Создание миграции 

Это будет первая миграция на новый сайт, который имеет блог. Все миграции будут в 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'] = 20121031100537;.

Пример использования 

В этом примере простой код помещается в 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_enabled FALSE TRUE / FALSE Включить или отключить миграций.
migration_path APPPATH.’migrations/’ Нет Путь к папка миграций.
migration_version 0 Нет Текущая версия базы данных которую следует использовать.
migration_table migrations Нет Имя таблицы для хранения номера версии схемы.
migration_auto_latest FALSE TRUE / FALSE Включить или отключить автоматический запуск миграций.
migration_type ‘timestamp’ ‘timestamp’ / ‘sequential’ Тип числового идентификатора, используемого для имен файлов миграции.

Настройки класса 

class CI_Migration 
current() 
Возвращает:TRUE если нет миграций, текущая версия при успехе, FALSE при неудаче
Возвращаемый тип:смешанный

Мигрирует до текущей версии (все, что находится в $config['migration_version'] в application/config/migration.php).

error_string() 
Возвращает:Сообщение ошибки
Возвращаемый тип:строка

Данная функция возвращает строку ошибки, в которой они были обнаружены при выполнении миграции.

find_migrations() 
Возвращает:Массив файлов миграции
Возвращаемый тип:массив

Возвращает массив имен файлов миграции, которые находятся в migration_path собственности.

latest() 
Возвращает:Строка текущей версии при успехе, FALSE при неудаче
Возвращаемый тип:смешанный

Это работает почти так же как current() но вместо того, чтобы искать $config['migration_version'], класс Миграции будет использовать новейшие миграции найденные в файловой системе.

version($target_version) 
Параметры:
  • $target_version (смешанный) – Версию миграции процесса
Возвращает:

TRUE если нет миграций, текущая версия при успехе, FALSE при неудаче

Возвращаемый тип:

смешанный

Версия может быть использована для отката изменений или шага вперед программными средствами для конкретных версий. Работает так же, как current(), но игнорирует $config['migration_version'].

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