按照Doctrine 2的enum defining a type指南,我有以下课程:
class EnumStatusType extends EnumType
{
protected $name = 'enumStatusType';
protected $values = [
'active',
];
}
现在,使用vendor/bin/doctrine-module migrations:diff
或vendor/bin/doctrine-module orm:schema-tool:update
或您喜欢的方式,它会成功创建包含枚举的列:
status ENUM(\'active\') COMMENT \'(DC2Type:enumStatusType)\' NOT NULL
现在,我想添加第二个值inactive
。但在运行orm:validate-schema
,orm:schema-tool:update
migrations:diff
后,他们都没有注意到有新值。
如何才能检测到此类更改,以便可以使用migrations:diff
进行新的迁移?
PS:我正在使用ZF2
和DoctrineORMModule
。不过它并不重要。
答案 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