genkgo / migrations
1.4.0
2024-09-02 17:49 UTC
Requires
- php: ~8.2.0 || ~8.3.0
- ext-pdo: *
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^9.5.26
README
一个简化迁移操作的库。
安装
需要PHP 8.0或更高版本。可以通过Composer安装和自动加载,作为 genkgo/migrations。
质量
在命令行中运行单元测试,请输入 vendor/bin/phpunit -c phpunit.xml
。需要 PHPUnit。
此库试图遵守 PSR-1、PSR-2 和 PSR-4。如果您注意到有不符合规范的地方,请通过pull request发送补丁。
入门指南
创建迁移文件
创建迁移文件,定义如何更新和撤销对应用程序的更改。
<?php use Genkgo\Migrations\AbstractMigration; class migration_2014_11_13_11_55 extends AbstractMigration { public function up() { // your changes here } public function down() { // undo changes here } }
迁移
适配器会保存已执行迁移的历史记录。当前库自带MySQL和Sqlite适配器。要添加新适配器,请创建自己的适配器并提交pull request。设置适配器,创建新列表(从目录中的文件列表中创建)并执行。
<?php use PDO; use Genkgo\Migrations\Factory; use Genkgo\Migrations\Adapters\PdoSqliteAdapter; $adapter = new PdoSqliteAdapter(new PDO('sqlite::memory:')); $factory = new Factory($adapter); $directory = __DIR__.'/migrations'; $list = $this->factory->newListFromDirectory($directory); $result = $list->migrate();
注入依赖
您可以注入自己的依赖项,例如以下示例中的某些数据库抽象层。
<?php use PDO; use Genkgo\Migrations\Factory; use Genkgo\Migrations\Adapters\PdoSqliteAdapter; use Vendor\DatabaseAbstractLayer\SchemaGenerator; $adapter = new PdoSqliteAdapter(new PDO('sqlite::memory:')); $factory = new Factory($adapter, function ($classname) { return new $classname(new SchemaGenerator()); });
然后在迁移文件中使用它。
<?php use Genkgo\Migrations\AbstractMigration; use Vendor\DatabaseAbstractLayer\SchemaGenerator; class migration_2014_11_13_11_55 extends AbstractMigration { private $schema; public function __construct(SchemaGenerator $schema) { $this->schema = $schema; } public function up() { // your changes here } public function down() { // undo changes here } }
以下示例使用 Aura.Di的自动参数值解析。
<?php use PDO; use Genkgo\Migrations\Factory; use Genkgo\Migrations\Adapters\PdoSqliteAdapter; $adapter = new PdoSqliteAdapter(new PDO('sqlite::memory:')); $factory = new Factory($adapter, function ($classname) use ($di) { return $di->newInstance($classname); });
多个列表
您可以有多个迁移列表,例如为每个插件一个列表。只需将迁移文件放入正确的命名空间。请参见以下示例。
<?php namespace Vendor\MyPlugin; use Genkgo\Migrations\AbstractMigration; class migration_2014_11_13_11_55 extends AbstractMigration { public function up () { } public function down () { } }
然后进行迁移。
$directory = __DIR__. '/migrations'; $list = $this->factory->newListFromDirectory($directory,'Vendor\\Plugin\\'); $list->migrate();
贡献
- 发现了一个错误?请先尝试自己解决它并提交pull request。如果您无法修复它,至少提供清晰的错误描述。当有时间时我们会查看。
- 想要添加功能吗?提交pull request并看看会发生什么。您还可以提交缺少功能的错误报告,我们可以讨论如何实现它。