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

Generated columns added to migrations file every time - any way to tell the migration to ignore single fields? #490

Open
gravitiq-cm opened this issue Mar 1, 2023 · 5 comments

Comments

@gravitiq-cm
Copy link

I have a generated column in my entity

/**
 * @ORM\Column(type="boolean", columnDefinition="TINYINT(1) GENERATED ALWAYS AS (xyz) STORED", insertable=false, updatable=false)
 * @ORM\Ignore()
 */

This works fine. However, every time I run make:migration (even with no new changes) a new migration file is created with the details of the generated columns. E.g. something like this:

        $this->addSql('ALTER TABLE my_table ADD my_field TINYINT(1) GENERATED ALWAYS AS (xyz) STORED');

I guess this is because the migration diff cannot see details of the generated column?

Is there any way to
a) see/debug what the migration is comparing to what (to see if I just need to tweak the text in the columnDefinition)
b) to mark the generated column as "ignore during migration" so make:migration does not consider it when creating migrations
?

@gravitiq-cm
Copy link
Author

Update: I tried to do some debugging in Doctrine\DBAL\Schema\Comparator but it seems there's no data about the generated field pulled from the database.

In the short term, is there a way to mark this column as excluded from consideration when calculating the migration diff?

@armellin
Copy link

Is there any update about this issue?

@whataboutpereira
Copy link

Same problem. I've gone as far as to mimic the complete create statement produced by MySQL:

columnDefinition: "tinyint GENERATED ALWAYS AS (_utf8mb4'ROLE_ADMIN' member of (`Roles`)) VIRTUAL"

But no matter what I do I always end up with a migration.

// this up() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE Users CHANGE isAdmin isAdmin tinyint GENERATED ALWAYS AS (_utf8mb4\'ROLE_ADMIN\' member of (`Roles`)) VIRTUAL');

// this down() migration is auto-generated, please modify it to your needs
$this->addSql('ALTER TABLE Users CHANGE isAdmin isAdmin TINYINT(1) DEFAULT NULL');

@HEKET313
Copy link

HEKET313 commented Aug 12, 2024

You have to either add NOT NULL to your generated column definition or add nullable: true to the column definition in your entity. This would help at least pass schema validation check BUT there's definetely a bug that Doctrine just doesn't compare column definition from attributes with actual one from DB. If you change columnDefinition param without changing other attributes of entity, migration won't be generated

@whataboutpereira
Copy link

You have to either add NOT NULL to your generated column definition or add nullable: true to the column definition in your entity. This would help at least pass schema validation check BUT there's definetely a bug that Doctrine just doesn't compare column definition from attributes with actual one from DB. If you change columnDefinition param without changing other attributes of entity, migration won't be generated

Thank you! MySQL didn't seem to accept NOT NULL on generated columns, however nullable: true worked.

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

4 participants