2 votes

Doctrine 2 - Comment mettre à jour le schéma avec les nouvelles valeurs de l'enum ?

Suivant l'enum de Doctrine 2 définir un type guide, j'ai la classe suivante :

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

Maintenant, en utilisant vendor/bin/doctrine-module migrations:diff ou vendor/bin/doctrine-module orm:schema-tool:update ou ce que vous préférez, il crée avec succès la colonne avec l'enum :

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

Maintenant, je voulais ajouter une deuxième valeur, inactive . Mais après avoir exécuté orm:validate-schema , orm:schema-tool:update migrations:diff aucun d'entre eux ne remarque qu'il y a une nouvelle valeur.

Comment puis-je faire en sorte qu'il détecte ce type de changements, de sorte qu'une nouvelle migration puisse être faite avec migrations:diff ?

PS : J'utilise ZF2 avec le DoctrineORMModule . Mais cela n'a pas d'importance.

0voto

Julien VITTE Points 1

Vous pouvez essayer d'ajouter la liste des valeurs de l'enum dans chaque option de commentaire de champ, en utilisant la fonction événement postGenerateSchema :

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()))));
        }
    }
}

Travaux pour le orm:schema-tool:update je suppose que c'est la même chose pour la commande migrations:diff

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X