Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

doctrine:migrations:diff always regenerates enum ALTER on mariadb #228

Open
ahmed-bhs opened this issue May 12, 2023 · 0 comments
Open

doctrine:migrations:diff always regenerates enum ALTER on mariadb #228

ahmed-bhs opened this issue May 12, 2023 · 0 comments

Comments

@ahmed-bhs
Copy link

ahmed-bhs commented May 12, 2023

I am using symfony/* v5.4.23 and a mariadb database v10.5.15. I have the following problem every time I run console doctrine:migrations:diff. The output always regenerates an ALTER on the enum field.

Here is an example output:


final class Version20230512083413 extends AbstractMigration
{
    public function up(Schema $schema): void
    {
        $this->addSql('ALTER TABLE catalog_product CHANGE publication_status publication_status ENUM(\'pending\', \'published\', \'deleted\') DEFAULT \'pending\' NOT NULL COMMENT \'(DC2Type:enum_status)\'');
    }

    public function down(Schema $schema): void
    {
        $this->addSql('ALTER TABLE catalog_product CHANGE publication_status publication_status ENUM(\'pending\', \'published\', \'deleted\') DEFAULT \'pending\' DEFAULT \'pending\' NOT NULL COMMENT \'(DC2Type:enum_status)\'');
    }
}

This is my EnumType:

final class EnumStatusType extends AbstractEnumType
{
    public const STATUS_PENDING = 'pending';
    public const STATUS_PUBLISHED = 'published';
    public const STATUS_DELETED = 'deleted';

    protected static array $choices = [
        self::STATUS_PENDING => 'pending',
        self::STATUS_PUBLISHED => 'published',
        self::STATUS_DELETED => 'deleted',
    ];

    public static function getDefaultValue(): string
    {
        return self::STATUS_PENDING; // This value will be used as default in DDL statement
    }
}

This is my doctrine config:

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'
        # DATABASE_URL=mysql://root:root@mariadb:3306/test?serverVersion=mariadb-10.5.15
        types:
            enum_status: App\Doctrine\DBAL\Types\EnumStatusType
    orm:
        auto_generate_proxy_classes: true
        naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
        auto_mapping: true
        mappings:
            App:
                is_bundle: false
                dir: '%kernel.project_dir%/src/Entity'
                prefix: 'App\Entity'
                alias: App

This is my entity property:

class CatalogProduct {
{
    /**
     * @var string
     *
     * @Assert\NotBlank()
     * @DoctrineAssert\Enum(entity="App\Doctrine\DBAL\Types\EnumStatusType")
     *
     * @ORM\Column(type="enum_status", nullable=false)
     */
    private $publicationStatus;

And finally, this is a quick scope about my current dependencies versions:

doctrine/dbal 3.6.2
doctrine/doctrine-migrations-bundle 3.2.2
doctrine/migrations 3.5.5
fresh/doctrine-enum-bundle v7.4.0

Any help would be appreciated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant