Класс 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