Создание файла миграции скелета

Начнем с создания новой миграции Phinx. Запустите Phinx с помощью create команды:

$ vendor/bin/phinx create MyNewMigration

Это создаст новую миграцию в формате YYYYMMDDHHMMSS_my_new_migration.php, в которой первые 14 символов заменяются текущей меткой времени до второго.

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

Phinx автоматически создает файл миграции скелета одним методом:

<?php

use Phinx\Migration\AbstractMigration;

class MyNewMigration extends AbstractMigration
{
    /**
     * Change Method.
     *
     * Write your reversible migrations using this method.
     *
     * More information on writing migrations is available here:
     * https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
     *
     * Remember to call "create()" or "update()" and NOT "save()" when working
     * with the Table class.
     *
     */
    public function change()
    {

    }
}

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

Метод изменения

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

<?php

use Phinx\Migration\AbstractMigration;

class CreateUserLoginsTable extends AbstractMigration
{
    public function change()
    {
        // create the table
        $table = $this->table('user_logins');
        $table->addColumn('user_id', 'integer')
              ->addColumn('created', 'datetime')
              ->create();
    }
}

При выполнении этой миграции Phinx создаст user_loginsтаблицу на пути вверх и автоматически выяснит , как опустить таблицу на пути вниз. Обратите внимание , что если changeсуществует способ, Phinx будет автоматически игнорировать upи downметоды. Если вам необходимо использовать эти методы, рекомендуется создать отдельный файл миграции.

При создании или обновлении таблиц внутри change()метода вы должны использовать Table create()и update()методы. Phinx не может автоматически определить, создает ли save()вызов новую таблицу или изменяет существующую.

Следующие действия являются обратимыми, если они выполняются через API таблиц в Phinx, и будут автоматически отменены:

  • Создание таблицы
  • Переименование таблицы
  • Добавление столбца
  • Переименование столбца
  • Добавление индекса
  • Добавление внешнего ключа

Если команду нельзя отменить, тогда Phinx выдаст сообщение IrreversibleMigrationExceptionпри переносе вниз. Если вы хотите использовать команду, которая не может быть отменена в функции изменения, вы можете использовать оператор if с $this->isMigratingUp()только для запуска вещей в направлении вверх или вниз. Например:

<?php

use Phinx\Migration\AbstractMigration;

class CreateUserLoginsTable extends AbstractMigration
{
    public function change()
    {
        // create the table
        $table = $this->table('user_logins');
        $table->addColumn('user_id', 'integer')
              ->addColumn('created', 'datetime')
              ->create();
        if ($this->isMigratingUp()) {
            $table->insert([['user_id' => 1, 'created' => '2020-01-19 03:14:07']])
                  ->save();
        }
    }
}

Метод Up

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

Метод Down

Метод down автоматически запускается Phinx, когда вы переходите вниз, и он обнаруживает, что данная миграция выполнялась в прошлом. Вы должны использовать метод down, чтобы отменить / отменить преобразования, описанные в методе up.

Метод init

init()Метод управляет Phinx до методов миграции , если она существует. Это можно использовать для установки общих свойств класса, которые затем используются в методах миграции.