Миграции
Миграция — класс, который описывает одно изменение структуры базы данных: создать таблицу, добавить столбец. Миграции хранятся вместе с кодом, поэтому база любого разработчика и сервера приводится к нужному виду одной командой. Файлы лежат в папке app/Database/Migrations.
Создание миграции
php spark make:migration CreatePostsВ папке появится файл с датой в имени, например 2026-03-02-101500_CreatePosts.php. Дата задаёт порядок выполнения. Опишите в нём таблицу статей:
// app/Database/Migrations/2026-03-02-101500_CreatePosts.php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class CreatePosts extends Migration
{
public function up()
{
$this->forge->addField([
'id' => ['type' => 'INT', 'unsigned' => true, 'auto_increment' => true],
'title' => ['type' => 'VARCHAR', 'constraint' => 255],
'body' => ['type' => 'TEXT'],
'status' => ['type' => 'TINYINT', 'default' => 0],
'created_at' => ['type' => 'DATETIME', 'null' => true],
'updated_at' => ['type' => 'DATETIME', 'null' => true],
]);
$this->forge->addKey('id', true);
$this->forge->createTable('posts');
}
public function down()
{
$this->forge->dropTable('posts');
}
}Метод up() вносит изменение, down() отменяет его. Объект $this->forge создаёт и меняет таблицы. Второй аргумент addKey() — true — делает ключ первичным.
Описание столбца
| Ключ | Значение |
|---|---|
type | Тип: INT, VARCHAR, TEXT, DECIMAL, DATETIME |
constraint | Длина: 255 для строки, '10,2' для DECIMAL |
unsigned | Только неотрицательные числа |
auto_increment | Автоматическая нумерация |
null | Может быть пустым |
default | Значение по умолчанию |
unique | Значения не повторяются |
Выполнение
php spark migrateCodeIgniter выполняет только те миграции, которые ещё не выполнялись, и запоминает их в служебной таблице migrations. После команды в базе появится таблица posts. Проверить состояние можно так:
php spark migrate:statusКоманда печатает список миграций с отметкой, какие из них выполнены.
Откат
php spark migrate:rollbackКоманда вызывает down() у последней группы миграций — таблица posts исчезнет. Команда php spark migrate:refresh отменяет все миграции и выполняет их заново.
Изменение таблицы
Чтобы добавить столбец в существующую таблицу, создают новую миграцию: php spark make:migration AddSlugToPosts.
public function up()
{
$this->forge->addColumn('posts', [
'slug' => ['type' => 'VARCHAR', 'constraint' => 255, 'null' => true, 'after' => 'title'],
]);
}
public function down()
{
$this->forge->dropColumn('posts', 'slug');
}После php spark migrate в таблице появится столбец slug.
Частая ошибка
Выполненную миграцию нельзя править: CodeIgniter считает её применённой и повторно не запустит, поэтому базы коллег и сервера останутся прежними. Для каждого изменения создавайте новую миграцию. И не запускайте migrate:refresh и migrate:rollback на рабочем сервере — они удаляют таблицы вместе с данными.