Doctrine 2 - 如何用新的枚举值更新模式?

Doctrine 2 - How to update schema with new enum values?

遵循 Doctrine 2 的枚举 defining a type 指南,我有以下 class:

class EnumStatusType extends EnumType
{
    protected $name   = 'enumStatusType';
    protected $values = [
        'active',
    ];
}

现在,使用 vendor/bin/doctrine-module migrations:diffvendor/bin/doctrine-module orm:schema-tool:update 或您喜欢的任何一个,它成功地创建了带有枚举的列:

status ENUM(\'active\') COMMENT \'(DC2Type:enumStatusType)\' NOT NULL

现在,我想添加第二个值,inactive。但是在 运行 orm:validate-schemaorm:schema-tool:update migrations:diff、none 之后他们注意到有一个新值。

我怎样才能让它检测到这种类型的更改,以便可以使用 migrations:diff 进行新的迁移?

PS:我正在使用 ZF2DoctrineORMModule。但这并不重要。

您可以尝试在每个字段注释选项中添加枚举值列表,使用 postGenerateSchema event:

class EnumListener
{
    public function postGenerateSchema(\Doctrine\ORM\Tools\Event\GenerateSchemaEventArgs $eventArgs)
    {
        $columns = [];

        foreach ($eventArgs->getSchema()->getTables() as $table) {
            foreach ($table->getColumns() as $column) {
                if ($column->getType() instanceof EnumType) {
                    $columns[] = $column;
                }
            }
        }

        /** @var \Doctrine\DBAL\Schema\Column $column */
        foreach ($columns as $column) {
            $column->setComment(trim(sprintf('%s (%s)', $column->getComment(), implode(',', $column->getType()->getEnum()::toArray()))));
        }
    }
}

适用于 orm:schema-tool:update 命令,我想它与 migrations:diff

相同