Spec-Zone.ru › CodeIgniter 3

Класс Migrations

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

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

  • Имена файлов миграций
  • Создание миграции
  • Пример использования
  • Настройки миграций
  • Справочник по классу

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

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

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

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

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

  • 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 при ошибке
Тип возвращаемого значения: mixed

Выполняет миграции до текущей версии (то, что установлено для $config['migration_version'] в application/config/migration.php).

error_string()
Возвращает: Сообщения об ошибках
Тип возвращаемого значения: string

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

find_migrations()
Возвращает: Массив файлов миграций
Тип возвращаемого значения: array

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

latest()
Возвращает: Строка текущей версии при успехе, FALSE при ошибке
Тип возвращаемого значения: mixed

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

version($target_version)
Параметры:
  • $target_version (mixed) – Версия миграции для обработки
Возвращает:

TRUE, если миграции не найдены, строка текущей версии при успехе, FALSE при ошибке

Тип возвращаемого значения:

mixed

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

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

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/userguide3/libraries/migration.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API