Команды 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;
}
}
0 комментариев