Bug Report
| Q |
A |
| BC Break |
no |
| Migrations version |
3.8.0 |
| Migrations bundle |
3.3.1 |
| ORM |
3.2.1 |
| DBAL |
4.0.4 |
| Symfony |
7.1.2 |
Summary
I have issue with DBAL 4 and custom type, the migrations keep getting generated again and again. Furthermore, the down migration looks totally bogus. This is possibly related to #1435
I know that DBAL 4 dropped requiresSqlHint (in doctrine/dbal#5107 , afterwards some issues were found and fixed - doctrine/dbal#6257 )
So when I am using custom type, I expect the first migration diff to drop the DC2Type comments. However my tables have these fields already dropped and yet the migration is being generated.
enum ActionType: string
{
case SUBMIT = 'submit';
case CANCEL = 'cancel';
}
class ActionTypeType extends Type
{
public function getSQLDeclaration(array $column, AbstractPlatform $platform): string
{
$class = ActionType::class;
$values = [];
foreach ($class::cases() as $val) {
$values[] = "'{$val->value}'";
}
return "enum(" . implode(", ", $values) . ")";
}
public function convertToDatabaseValue($value, AbstractPlatform $platform): mixed
{
$class = ActionType::class;
if ($value !== null && !($value instanceof BackedEnum)) {
$value = $class::tryFrom($value);
}else{
return null;
}
return $value->value;
}
public function convertToPHPValue($value, AbstractPlatform $platform): ?BackedEnum
{
if ((!is_int($value)) && !is_string($value)) {
return null;
}
return $class::tryFrom($value);
}
}
I then have my entity as
#[ORM\Entity(repositoryClass: ActionRepository::class)]
#[ORM\Table(name: 'actions')]
class Action
{
#[ORM\Id]
private string $name;
#[ORM\Column(type: ActionType::class, nullable: false)]
private ActionType $type;
}
and in Kernel.php I set up type mapping inside Kernel::process():
$typesDefinition[ActionType::class] = ['class' => ActionTypeType::class];
$container->setParameter('doctrine.dbal.connection_factory.types', $typesDefinition);
Now I know that the types are assigned correctly, as migrations generate up like this:
public function up(Schema $schema): void
{
$this->addSql('ALTER TABLE actions CHANGE type type enum(\'submit\', \'cancel\') NOT NULL');
}
but it is generated ALWAYS.
and the down() migration looks even weirder:
public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE actions CHANGE type type VARCHAR(0) NOT NULL');
}
Everything works fine with DBAL 3, which uses SQL comments
Bug Report
Summary
I have issue with DBAL 4 and custom type, the migrations keep getting generated again and again. Furthermore, the down migration looks totally bogus. This is possibly related to #1435
I know that DBAL 4 dropped requiresSqlHint (in doctrine/dbal#5107 , afterwards some issues were found and fixed - doctrine/dbal#6257 )
So when I am using custom type, I expect the first migration diff to drop the
DC2Typecomments. However my tables have these fields already dropped and yet the migration is being generated.I then have my entity as
and in
Kernel.phpI set up type mapping insideKernel::process():Now I know that the types are assigned correctly, as migrations generate up like this:
but it is generated ALWAYS.
and the
down()migration looks even weirder:Everything works fine with DBAL 3, which uses SQL comments