petrknap/doctrine-unalterablemigrations

Doctrine 迁移不可变对象的迁移

v1.1.0 2020-08-13 09:01 UTC

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 格式并将其文件提取到您的项目中。