2010-01-18 4 views

Répondre

0

Modifiez votre schéma et ne créez pas encore le modèle. exécuter le schéma de doctrine diff puis une classe de migration sera générée pour vous. Enfin, vous pouvez reconstruire vos modèles/formulaires/filtres

20
  1. modifier votre schéma

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

    cela va générer un ou plusieurs fichiers dans lib/migrations/doctrine/

  3. exécuter ./symfony doc:migrate

    cela va appliquer les migrations générées à la base de données

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

    cela fonctionne pour symfony> = 1.3/1.4 et reconstruire toutes les formes/filtres/classes de modèle selon le schéma modifié

se rappeler que la migration est générée comparant la new schema.yml pour les classes de modèles actuelles, donc si vous reconstruisez vos classes avant d'exécuter generate-migrations-diff vous êtes foutu.

1

Raccourci:

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

besoin de faire ./symfony doc: generate-migrations-diff d'abord, je pense. – Populus

4

Si vous avez besoin d'écrire le script de migration vous-même, voici un exemple de la syntaxe - je ne l'ai pas trouvé une spécification correcte pour la syntaxe partout.

$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 façon la plus simple de l'exécuter à partir d'une doctrine de migration est d'enregistrer une nouvelle cartographie. Ensuite, vous pouvez appliquer des valeurs à l'intérieur de votre entité, le cas échéant. (Doctrine MySQL Enums)

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

J'ai eu le même problème et trouvé une solution dans le jeu ce drapeau dans ProjectConfiguration.class.php

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

Après que j'ai utilisé cet appel de méthode et d'obtenir un ENUM mysql natif:

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' 
       ) 
      ) 
     ); 
} 
Questions connexes