Doctrine 2 - 如何使用新的枚举值更新架构?

时间:2017-02-03 20:08:27

标签: doctrine-orm enums doctrine dbal

按照Doctrine 2的enum defining a type指南,我有以下课程:

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后,他们都没有注意到有新值。

如何才能检测到此类更改,以便可以使用migrations:diff进行新的迁移?

PS:我正在使用ZF2DoctrineORMModule。不过它并不重要。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用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

是相同的