una modificar migrar migraciones migracion especifica ejecutar symfony1 migration doctrine

symfony1 - modificar - Agregar nueva columna enum durante la migración



migrar laravel (7)

¿Puede alguien decirme cómo puedo agregar una nueva columna de tipo enumeración a mi esquema para implementar una migración de Doctrine?


Modifique su esquema y aún no construya el modelo. Ejecute doctrine schema diff y luego se generará una clase de migración para usted. Finalmente puedes reconstruir tus modelos / formularios / filtros


Atajo:

symfony doctrine:build --all-classes --and-migrate


En caso de que necesite escribir el script de migración usted mismo, aquí hay un ejemplo de la sintaxis: no he encontrado una especificación adecuada para la sintaxis en ninguna parte.

$this->addColumn(''tablename'', ''column_name'', ''enum'', false, array(''fixed'' => 1, ''values'' => array(0 => ''auto'', 1 => ''manual'', 2 => ''unknown''), ''default'' => ''unknown'', ''notnull'' => true, ''length'' => NULL, ));


Model: column: type: enum values: [one, two, three] (optional:) notnull: false default: one #or two or three


La forma más sencilla de ejecutarlo desde una migración de Doctrine es registrar una nueva asignación. Entonces puede aplicar valores dentro de su entidad si es necesario. ( Doctrine MySQL Enums )

public function up(Schema $schema) { $this->connection->getDatabasePlatform()->registerDoctrineTypeMapping(''enum'', ''string''); ... }


  1. modifica tu esquema

  2. ejecutar ./symfony doc:generate-migrations-diff

    esto generará uno o más archivos en lib / migrations / doctrine /

  3. ejecutar ./symfony doc:migrate

    esto aplicará las migraciones generadas a la base de datos

  4. ejecutar ./symfony doc:build --all-classes

    esto funciona para symfony> = 1.3 / 1.4 y reconstruirá todas las formas / filtros / clases de modelos de acuerdo con el esquema modificado

recuerde que la migración se genera comparando el nuevo schema.yml con las clases de modelo actuales, por lo que si vuelve a generar sus clases antes de ejecutar generate-migrations-diff lo atornillarán.


Tuve el mismo problema y encontré una solución en establecer esta bandera en ProjectConfiguration.class.php

public function configureDoctrine(Doctrine_Manager $manager) { $manager->setAttribute(Doctrine_Core::ATTR_USE_NATIVE_ENUM, true); }

Después de eso, utilicé este método call y obtuve una enum mysql nativa:

class MyMigration extends Doctrine_Migration_Base { public function up() { $this->changeColumn(self::tableName, ''columName'', ''enum'', null, array( ''fixed'' => true, ''length'' => null, ''notnull'' => true, ''values'' => array( 0 => ''Option 1'', 1 => ''Option 2'' ) ) ); }