Команды Phinx запускается с помощью ряда команд.

Команда breakpoint

Команда Breakpoint используется для установки точек останова, что позволяет ограничить откаты. Вы можете переключить точку останова последней миграции, не задавая никаких параметров.

$ phinx breakpoint -e development

Чтобы переключить точку останова на определенной версии, используйте --target параметр или -tдля краткости.

$ phinx breakpoint -e development -t 20120103083322

Вы можете удалить все точки останова с помощью --remove-allпараметра или -rдля краткости.

$ phinx breakpoint -e development -r

Вы можете установить или отключить (а не просто переключать) точку останова в последней миграции (или в конкретной миграции в сочетании с параметром --targetили -t) с помощью -setили --unset.

Точки останова видны при запуске statusкоманды.

Команда create

Команда Create используется для создания нового файла миграции. Требуется один аргумент: имя миграции. Имя миграции должно быть указано в формате CamelCase.

$ phinx create MyNewMigration

Откройте новый файл миграции в текстовом редакторе, чтобы добавить преобразования базы данных. Phinx создает файлы миграции, используя путь, указанный в вашем файле конфигурации phinx. 

Вы можете переопределить файл шаблона, используемый Phinx, указав альтернативное имя файла шаблона.

$ phinx create MyNewMigration --template="<file>"

Вы также можете предоставить класс для создания шаблона. Этот класс должен реализовывать интерфейс Phinx\Migration\CreationInterface.

$ phinx create MyNewMigration --class="<class>"

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

Нельзя использовать --templateи --classвместе.

Команда init

Команда Init (сокращение от initialize) используется для подготовки вашего проекта к работе с Phinx. Эта команда генерирует файл конфигурации phinx в корне каталога вашего проекта. По умолчанию этому файлу будет присвоено имя phinx.php.

$ phinx init

При желании вы можете указать произвольное расположение для файла конфигурации Phinx:

$ phinx init ./custom/location/

Вы также можете указать собственное имя файла:

$ phinx init custom-config.yml

А также формат, отличный от php, yml и json. Например, чтобы создать файл yml:

$ phinx init --format yml

Откройте этот файл в текстовом редакторе, чтобы настроить конфигурацию проекта. Пожалуйста, см. Главу Конфигурация для получения дополнительной информации.

Команда migrate

Команда Migrate запускает все доступные миграции, возможно, до определенной версии.

$ phinx migrate -e development

Чтобы перейти на конкретную версию, используйте --targetпараметр или -t для краткости.

$ phinx migrate -e development -t 20110103081132

Используется --dry-runдля вывода запросов на стандартный вывод без их выполнения.

$ phinx migrate --dry-run

Команда rollback

Команда Rollback используется для отмены предыдущих миграций, выполненных Phinx. Это противоположно команде «Миграция».

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

$ phinx rollback -e development

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

$ phinx rollback -e development -t 20120103083322

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

$ phinx rollback -e development -t 0

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

$ phinx rollback -e development -d 2012
$ phinx rollback -e development -d 201201
$ phinx rollback -e development -d 20120103
$ phinx rollback -e development -d 2012010312
$ phinx rollback -e development -d 201201031205
$ phinx rollback -e development -d 20120103120530

Если установлена ​​точка останова, блокируя дальнейшие откаты, вы можете переопределить точку останова с помощью --forceпараметра или -fдля краткости.

$ phinx rollback -e development -t 0 -f

Используется --dry-runдля вывода запросов на стандартный вывод без их выполнения.

$ phinx rollback --dry-run

При откате Phinx упорядочивает выполненные миграции, используя порядок, указанный в version_orderпараметрах вашего файла конфигурации phinx. 

Команда status

Команда Status распечатывает список всех миграций вместе с их текущим статусом. Вы можете использовать эту команду, чтобы определить, какие миграции были запущены.

$ phinx status -e development

Эта команда завершается с кодом 0, если база данных актуальна (т. Е. Все миграции выполняются), или с одним из следующих кодов в противном случае:

2: отсутствует как минимум одна миграция.

3: Произошла по крайней мере одна миграция вниз.

Код выхода 1 означает, что произошла ошибка приложения.

Команда seed create

Команду Seed Create можно использовать для создания новых классов семян базы данных. Требуется один аргумент - имя класса. Имя класса следует указывать в формате CamelCase.

$ phinx seed:create MyNewSeeder

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

Вы можете переопределить файл шаблона, используемый Phinx, указав альтернативное имя файла шаблона.

$ phinx seed:create MyNewSeeder --template="<file>"

Команда seed run

Команда Seed Run запускает все доступные классы семян или, при желании, только один.

$ phinx seed:run -e development

Чтобы запустить только один начальный класс, используйте --seedпараметр или -sдля краткости.

$ phinx seed:run -e development -s MyNewSeeder

Параметр файла конфигурации

При запуске Phinx из командной строки вы можете указать файл конфигурации с помощью параметра --configurationили -c. В дополнение к YAML файл конфигурации может быть вычисленным выводом файла PHP в виде массива PHP:

<?php
    return [
        "paths" => [
            "migrations" => "application/migrations"
        ],
        "environments" => [
            "default_migration_table" => "phinxlog",
            "default_environment" => "dev",
            "dev" => [
                "adapter" => "mysql",
                "host" => $_ENV['DB_HOST'],
                "name" => $_ENV['DB_NAME'],
                "user" => $_ENV['DB_USER'],
                "pass" => $_ENV['DB_PASS'],
                "port" => $_ENV['DB_PORT']
            ]
        ]
    ];

Phinx автоматически определяет , какой язык анализатор использовать для файлов с *.yaml, *.yml, *.jsonи *.phpрасширениями. Соответствующий анализатор также может быть определен через --parserи -pпараметры. Все, кроме "json"или "php", рассматривается как YAML.

При использовании массива PHP вы можете предоставить connectionключ с существующим экземпляром PDO. Также важно передать имя базы данных, так как Phinx требует этого для определенных методов, таких как hasTable():

<?php
    return [
        "paths" => [
            "migrations" => "application/migrations"
        ),
        "environments" => [
            "default_migration_table" => "phinxlog",
            "default_environment" => "dev",
            "dev" => [
                "name" => "dev_db",
                "connection" => $pdo_instance
            ]
        ]
    ];

Запуск Phinx в веб-приложении

Phinx также можно запускать внутри веб-приложения с помощью Phinx\Wrapper\TextWrapper класса. Пример этого предоставляется в app/web.php, который может быть запущен как автономный сервер:

$ php -S localhost:8000 vendor/robmorgan/phinx/app/web.php

Это создаст локальный веб-сервер по адресу http://localhost:8000, который по умолчанию покажет текущий статус миграции. Для запуска миграции используйте http:// localhost:8000/migrate, а для отката используйте http://localhost:8000/rollback .

Включенное веб-приложение является только примером и не должно использоваться в производственной среде!

Чтобы изменить переменные конфигурации во время выполнения и переопределить %%PHINX_DBNAME%% или другой другой динамический параметр, установите $_SERVER['PHINX_DBNAME']перед запуском команд. Доступные параметры задокументированы на странице конфигурации.

Обертывание Phinx в другом консольном приложении Symfony

Phinx можно обернуть и запустить как часть отдельного консольного приложения Symfony. Это может быть желательно для предоставления пользователю унифицированного интерфейса для всех аспектов вашего приложения или потому, что вы хотите запустить несколько команд Phinx. Хотя вы можете запускать команды execили использовать вышеперечисленное Phinx\Wrapper\TextWrapper, но это затрудняет обработку кода возврата и вывода таким же образом, как и в вашем приложении.

К счастью, Symfony упрощает выполнение такой «мета-команды»:

use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Phinx\Console\PhinxApplication;

// ...

protected function execute(InputInterface $input, OutputInterface $output)
{

    $phinx = new PhinxApplication();
    $command = $phinx->find('migrate');

    $arguments = [
        'command'         => 'migrate',
        '--environment'   => 'production',
        '--configuration' => '/path/to/phinx/config/file'
    ];

    $input = new ArrayInput($arguments);
    $returnCode = $command->run(new ArrayInput($arguments), $output);
    // ...
}

Здесь вы создаете экземпляр PhinxApplication, сообщаете ему найти migrate команду, определяете аргументы для передачи ему (которые соответствуют аргументам и флагам командной строки), а затем, наконец, запускаете команду, передавая ее так же OutputInterface, как ваше приложение.

Смотрите эту страницу Symfony для получения дополнительной информации.

Использование Phinx с PHPUnit

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

public function setUp ()
{
  $app = new PhinxApplication();
  $app->setAutoExit(false);
  $app->run(new StringInput('migrate'), new NullOutput());
}

Если вы используете базу данных памяти, вам нужно предоставить Phinx конкретный экземпляр PDO. Вы можете взаимодействовать с Phinx напрямую, используя класс Manager:

use PDO;
use Phinx\Config\Config;
use Phinx\Migration\Manager;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Console\Input\StringInput;
use Symfony\Component\Console\Output\NullOutput;

class DatabaseTestCase extends TestCase {

    public function setUp ()
    {
        $pdo = new PDO('sqlite::memory:', null, null, [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        ]);
        $configArray = require('phinx.php');
        $configArray['environments']['test'] = [
            'adapter'    => 'sqlite',
            'connection' => $pdo
        ];
        $config = new Config($configArray);
        $manager = new Manager($config, new StringInput(' '), new NullOutput());
        $manager->migrate('test');
        $manager->seed('test');
        // You can change default fetch mode after the seeding
        $this->pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
        $this->pdo = $pdo;
    }

}