pccomponentes/migration
Composer 安装命令:
composer require pccomponentes/migration
包简介
Simple migration system with symfony console commands
README 文档
README
Entendemos como migración a la ejecución de todas las tareas relacionadas con la preparación de la infrastructura. Por ejemlo, crear tablas en una BD, alterarlas, insertas datos iniciales, crear colas en un sistema de mensajería, etc.
Esta librería proporciona la base para ejecutar esas migraciones mediante comandos de consola con el componente de symfony.
Crear una migración
Se recomienda crear un directorio migrations en la raíz del proyecto, y un subdirectorio con el tipo de migración que contendrá, por ejemplo mysql, rabbitmq, o similares.
Por cada migración, creamos un fichero PHP con la declaración de una clase, que por convenio, debe llamarse igual que el fichero. Dicha clase no debe estar en un namespace.
Tu clase migración necesitará como dependencias en su constructor, lo mínimo necesario para hacer el trabajo. Por ejemplo, veámos como sería una migración de \PDO, para crear o borrar una tabla ejemlo.
Deberá implementar la interfaz Pccomponentes\Migration\Migration, con las tareas a realizar.
<?php declare(strict_types=1); use Pccomponentes\Migration\Migration; class PdoMigration implements Migration { private $connection; public function __construct(\PDO $connection) { $this->connection = $connection; } public function upOperation(): void { $this->connection->exec(' CREATE TABLE example ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL ) '); } public function downOperation(): void { $this->connection->exec('DROP TABLE example'); } }
Ejecutar una migración
Para ejecutar la migración, tenemos dos caminos: Usando el framework de symfony, o creando nuestra propia aplicación symfony de consola.
Con el framework symfony
Si nuestro proyecto cuenta con el framework de symfony, podemos meter el comando directamente al contenedor de dependencias, y marcarlo con el tag correspondiente, para que el kernel y el ejecutable console de symfony lo ejecute directamente.
Para añadirlo, sería modificar el fichero config/services.yml con esta información:
pdo.connection: class: \PDO arguments: - 'mysql:dbname=testdb;host=localhost;port=3306' - 'user' - 'password' pdo_migration_command: class: Pccomponentes\Migration\MigrationCommand arguments: - 'pdo' # nombre del comando, que se concatenará a "migration:" - '%kernel.root_dir%/../migrations/pdo' # Ruta al directorio de las migraciones para este comando - ['@pdo.connection'] # Dependencias para construir nuestra migración tags: - { name: console.command }
Creando nuestra propia aplicación
Para poder ejecutar el comando, previamente tenemos que generar una aplicación. Para ello, deberíamos crear un fichero PHP con el siguiente contenido, modificado lo necesario para adaptarlo a tu nuestro proyecto.
Como será un ejecutable de consola, lo llamaremos console sin extensión, y lo pondremos en un directorio bin en la raíz de tu proyecto.
#!/usr/bin/env php <?php require __DIR__ . '/../vendor/autoload.php'; use Symfony\Component\Console\Application; use Pccomponentes\Migration\MigrationCommand; $application = new Application(); $application->addCommands( [ new MigrationCommand( 'pdo', __DIR__ . '/../migration/pdo', [ new \PDO('mysql:dbname=testdb;host=localhost;port=3306', 'user', 'password') ] ) ] ); $application->run();
Ejecutar el comando
Para ejecutar el comando en modo UP, sería:
$> bin/console migration:pdo --operation=up PdoMigration
Si queremos ejecutar un DOWN:
$> bin/console migration:pdo --operation=down PdoMigration
Además es posible ejecutar múltiples ficheros del mismo tipo, en orden. Por ejemplo:
$> bin/console migration:pdo --operation=up PdoMigration1 PdoMigration2 PdoMigration3
pccomponentes/migration 适用场景与选型建议
pccomponentes/migration 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 12.46k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2018 年 09 月 19 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 pccomponentes/migration 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 pccomponentes/migration 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 12.46k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 9
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2018-09-19