petrknap / doctrine-unalterablemigrations
Doctrine 迁移不可变对象的迁移
v1.1.0
2020-08-13 09:01 UTC
Requires
- php: >=7.2
- doctrine/migrations: ^3.0
- psr/log: ^1.1
Requires (Dev)
- phpunit/phpunit: ^7.5
This package is auto-updated.
Last update: 2024-09-13 18:00:11 UTC
README
此包提供了一种简单的方式来迁移不可变对象,例如视图和触发器。
示例
创建视图
<?php declare(strict_types=1); namespace DoctrineMigrations; use Doctrine\Migrations\AbstractMigration; use PetrKnap\Doctrine\UnalterableMigrations\UnalterableMigrationInterface; use PetrKnap\Doctrine\UnalterableMigrations\UnalterableMigrationTrait; class Version1 extends AbstractMigration implements UnalterableMigrationInterface { use UnalterableMigrationTrait; public function getUpSql(): string { return 'CREATE VIEW view_b AS ( SELECT a.id FROM table_a a )'; } public function getDownSql(): ?string { return 'DROP VIEW view_b'; } }
修改视图
<?php declare(strict_types=1); namespace DoctrineMigrations; use Doctrine\Migrations\AbstractMigration; use PetrKnap\Doctrine\UnalterableMigrations\Patches; use PetrKnap\Doctrine\UnalterableMigrations\UnalterableMigrationInterface; use PetrKnap\Doctrine\UnalterableMigrations\UnalterableMigrationTrait; class Version2 extends AbstractMigration implements UnalterableMigrationInterface { use UnalterableMigrationTrait; public function getParentClassName(): ?string { return Version1::class; } public function getUpSql(): string { return Patches::on($this->getParent()->getUpSql()) ->removeLine(2, 'a.id') ->insertLine(2, 'a.id,') ->insertLine(3, 'a.name') ->apply(); } }
重命名视图
<?php declare(strict_types=1); namespace DoctrineMigrations; use Doctrine\Migrations\AbstractMigration; use PetrKnap\Doctrine\UnalterableMigrations\Patches; use PetrKnap\Doctrine\UnalterableMigrations\UnalterableMigrationInterface; use PetrKnap\Doctrine\UnalterableMigrations\UnalterableMigrationTrait; class Version3 extends AbstractMigration implements UnalterableMigrationInterface { use UnalterableMigrationTrait; public function getParentClassName(): ?string { return Version2::class; } public function getUpSql(): string { return Patches::on($this->getParent()->getUpSql()) ->removeLine(1, 'CREATE VIEW view_b AS (') ->insertLine(1, 'CREATE VIEW view_c AS (') ->apply(); } public function getDownSql(): ?string { return 'DROP VIEW view_c'; } }
删除视图
<?php declare(strict_types=1); namespace DoctrineMigrations; use Doctrine\Migrations\AbstractMigration; use PetrKnap\Doctrine\UnalterableMigrations\UnalterableMigrationInterface; use PetrKnap\Doctrine\UnalterableMigrations\UnalterableMigrationTrait; class Version4 extends AbstractMigration implements UnalterableMigrationInterface { use UnalterableMigrationTrait; public function getParentClassName(): ?string { return Version3::class; } public function getUpSql(): string { return self::DROP_PARENT; } }
如何安装
运行 composer require petrknap/doctrine-unalterablemigrations
或手动将此 JSON 代码合并到您的项目 composer.json
文件中,然后运行 composer install
。您可以使用已发布的版本之一而不是 dev-master
。
{ "require": { "petrknap/doctrine-unalterablemigrations": "dev-master" } }
或者通过 git clone https://github.com/petrknap/doctrine-unalterablemigrations.git
手动克隆此存储库,或者下载 此存储库的 ZIP 格式并将其文件提取到您的项目中。