2010-01-18 13 views

Respuesta

0

Modifique su esquema y no construya aún el modelo. Ejecute doctrine schema diff y luego se generará una clase de migración para usted. Por último se puede reconstruir sus modelos/formas/filtros

20
  1. modificar su esquema

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

    esto va a generar uno o más archivos en lib/migraciones/doctrina/

  3. ejecutar ./symfony doc:migrate

    esto aplicará las migraciones generadas a la base de datos

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

    esto funciona para Symfony> = 1.3/1.4 y reconstruirá todos/filtros/clases del modelo de formulario de acuerdo con el esquema modificado

recordar que se genera la migración comparando la nuevo schema.yml para las clases de modelo actuales, por lo que si reconstruyes tus clases antes de ejecutar generate-migrations-diff, estás jodido.

1

Atajo:

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

tiene que hacer ./symfony doc: generate-migrations-diff primero, creo. – Populus

4

En caso de tener que escribir el script de migración de ti mismo, aquí es un ejemplo de la sintaxis - No he encontrado una especificación adecuada para la sintaxis en cualquier lugar.

$this->addColumn('tablename', 'column_name', 'enum', false, 
        array('fixed' => 1, 
         'values' => 
         array(0 => 'auto', 
           1 => 'manual', 
           2 => 'unknown'), 
         'default' => 'unknown', 
         'notnull' => true, 
         'length' => NULL, 
        )); 
-1
Model: 
    column: 
    type: enum 
    values: [one, two, three] 

(optional:) 
    notnull: false 
    default: one #or two or three 
0

La forma más sencilla de ejecutar desde una migración de doctrina es el registro de 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'); 
    ... 
} 
0

que tenía el mismo problema y encontré una solución en conjunto 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é esta llamada al método y obtener una enumeración nativo de MySQL:

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' 
       ) 
      ) 
     ); 
} 
Cuestiones relacionadas