Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Миграции

Миграция — класс, который описывает одно изменение структуры базы данных: создать таблицу, добавить столбец. Миграции хранятся вместе с кодом, поэтому база любого разработчика и сервера приводится к нужному виду одной командой. Файлы лежат в папке 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 migrate

CodeIgniter выполняет только те миграции, которые ещё не выполнялись, и запоминает их в служебной таблице 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 на рабочем сервере — они удаляют таблицы вместе с данными.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.