maxim-oleinik / blade-migrations-symfony
Symfony 控制台命令用于 Blade/Migrations
0.2.0
2018-10-27 12:48 UTC
Requires
- php: >=7.0
- maxim-oleinik/blade-migrations: ^0.2.0
- symfony/console: ^3.4
This package is auto-updated.
Last update: 2024-09-28 01:54:42 UTC
README
一组用于 Symfony Console 的控制台命令,使用当前数据库连接在你的 Symfony 项目中。
查看 https://github.com/maxim-oleinik/blade-migrations
安装和配置
-
在 composer 中添加
composer require maxim-oleinik/blade-migrations-symfony
-
创建可执行的命令行脚本(如果尚未创建)
查看 https://symfony.com.cn/doc/current/components/console.html#creating-a-console-applicationcli.php ------- #!/usr/bin/env php <?php require __DIR__.'/vendor/autoload.php'; use Symfony\Component\Console\Application; $application = new Application(); // ... register commands $application->run();
-
命令和它们的注册方案
// Подключение к БД $conn = new MyDbConnection; // implements \Blade\Database\DbConnectionInterface // $conn = new \Blade\Database\Connection\PostgresConnection($connectionString); // $conn = new \Blade\Database\Connection\MysqlConnection($host, $user, $pass, $dbName, $port); // $conn = new \Blade\Database\Connection\PdoConnection($dsn, $user, $pass); см. https://github.com/maxim-oleinik/blade-database $dbAdapter = new \Blade\Database\DbAdapter($conn); $repoDb = new \Blade\Migrations\Repository\DbRepository($migrationTableName = 'migrations', $dbAdapter); $repoFile = new \Blade\Migrations\Repository\FileRepository($migrationsDir = __DIR__ . '/migrations'); $service = new \Blade\Migrations\MigrationService($repoFile, $repoDb); $application->add(new \Blade\Migrations\Symfony\Console\InstallCommand($repoDb)); $application->add(new \Blade\Migrations\Symfony\Console\MakeCommand(new \Blade\Migrations\Operation\MakeOperation($repoFile))); $application->add(new \Blade\Migrations\Symfony\Console\StatusCommand(new \Blade\Migrations\Operation\StatusOperation($service))); $application->add(new \Blade\Migrations\Symfony\Console\MigrateCommand(new \Blade\Migrations\Operation\MigrateOperation($service))); $application->add(new \Blade\Migrations\Symfony\Console\RollbackCommand(new \Blade\Migrations\Operation\RollbackOperation($service)));
-
在数据库中创建迁移表
php cli.php migrate:install
命令
创建迁移
php cli.php migrate:make NAME
迁移文件
--TRANSACTION
- 迁移应该在事务中运行- 指令通过
--UP
和--DOWN
标签分开 - SQL 查询通过
";"
分隔
--TRANSACTION
--UP
ALTER TABLE authors ADD COLUMN code INT;
ALTER TABLE posts ADD COLUMN slug TEXT;
--DOWN
ALTER TABLE authors DROP COLUMN code;
ALTER TABLE posts DROP COLUMN slug;
如果需要更改分隔符,当 SQL 需要使用 ";"
时
--TRANSACTION
--SEPARATOR=@
--UP
... sql@
... sql@
--DOWN
... sql@
... sql@
查看 https://github.com/maxim-oleinik/blade-migrations 的语法
状态
php cli.php migrate:status
+---+----+---------------------+------------------------+
| | ID | Date | Name |
+---+----+---------------------+------------------------+
| Y | 6 | 28.08.2018 20:17:01 | 20180828_195348_M1.sql |
| D | 7 | 28.08.2018 20:17:21 | 20180828_201639_M3.sql |
| A | | | 20180828_200950_M2.sql |
+---+----+---------------------+------------------------+
其中
- Y - 已执行
- D - 需要回滚(当前分支中没有该操作)
- A - 在队列中
迁移
# Накатить следующую по очереди А-миграцию
php cli.php migrate:up
# Не спрашивать подтверждение
php cli.php migrate:up -f
# Автомиграция - удаляет D-миграции, накатывает А-миграции
php cli.php migrate:up --auto
# Накатить миграцию из указанного файла
php cli.php migrate:up FILE_NAME
回滚
# Откатить последнюю Y-миграцию
php cli.php migrate:rollback
# Не спрашивать подтверждение
php cli.php migrate:rollback -f
# Откатить миграцию по ее номеру
php cli.php migrate:rollback --id=N
# Откатить миграцию, инструкции загрузить из файла, а не из БД (например, если в базу попала ошибка)
php cli.php migrate:rollback --load-file