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'');
...
}
modifica tu esquema
ejecutar
./symfony doc:generate-migrations-diff
esto generará uno o más archivos en lib / migrations / doctrine /
ejecutar
./symfony doc:migrate
esto aplicará las migraciones generadas a la base de datos
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''
)
)
);
}