Tengo una pregunta si alguien se enfrentó a este tipo de problema. He estado buscando una solución pero no la encontré.
Cada vez que genero una migración con la doctrina, veo en los archivos de migración:
public function up(Schema $schema): void { $this->addSql('ALTER TABLE verification ALTER id TYPE UUID'); $this->addSql('ALTER TABLE verification ALTER id DROP DEFAULT'); } public function down(Schema $schema): void { $this->addSql('ALTER TABLE verification ALTER verification_id TYPE UUID'); $this->addSql('ALTER TABLE verification ALTER verification_id DROP DEFAULT'); }estas son mis anotaciones:
use Ramsey\Uuid\Doctrine\UuidGenerator; /** * @ORM\Id * @ORM\Column(type="uuid", unique=true) * @ORM\GeneratedValue(strategy="CUSTOM") * @ORM\CustomIdGenerator(class=UuidGenerator::class) * * @Groups({"read"}) **/ private UuidInterface $id;Uso la imagen de postgress: postgres:13-alpine y "doctrine/doctrine-migrations-bundle": "^3.0",
framework "api-plataforma/núcleo": "^2.6",
Probé versiones anteriores de la doctrina-migraciones-paquete junto con postgres: 12
Esos alters se agregan en cada migración. Revisé mi base de datos local, la solté, eliminé los volúmenes de la ventana acoplable. Luego vuelvo a iniciar los contenedores, ejecuto la migración para asegurarme de que obtuve el esquema de base de datos correcto. El problema todavía ocurre. No sé qué causa este problema. Tal vez algunos de ustedes tienen alguna idea de lo que puedo buscar?
Probablemente tenga la versión 1.7.0 de la extensión ramsey/uuid-doctrine en su composer.lock, porque realmente tiene un error al generar el esquema. Que se solucionó hace solo unos días: https://github.com/ramsey/uuid-doctrine/pull/165
Así que intente bajar a 1.6.0:
composer require ramsey/uuid-doctrine:1.6.0(o actualizar a la última versión de desarrollo)
La razón por la cual la doctrina sigue generando migración para modificar la columna uuid es que la clase de tipo personalizado (que es Ramsey\Uuid\Doctrine\UuidType ) no tiene el indicador requireSQLCommentHint (en 1.7.0):
/** * {@inheritdoc} * * @param AbstractPlatform $platform * * @return bool */ public function requiresSQLCommentHint(AbstractPlatform $platform) { return true; } Esta bandera le dice a la doctrina que use un comentario en el campo para determinar en qué tipo personalizado se deben hidratar los valores de este campo. En el caso de Ramsey UuidType, el comentario debería verse así: (DC2Type:uuid)
Como solución rápida, incluso puede simplemente agregar el comentario manualmente (sin actualizar el paquete ramsey/uuid-doctrine):
COMMENT ON COLUMN verification.id IS '(DC2Type:uuid)'o vía migración:
$this->addSql('COMMENT ON COLUMN verification.id IS \'(DC2Type:uuid)\'');