Quelqu'un peut-il me dire comment ajouter une nouvelle colonne de type enum à mon schéma afin d'implémenter une migration de doctrine?Ajouter une nouvelle colonne enum pendant la migration
Répondre
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
modifier votre schéma
run
./symfony doc:generate-migrations-diff
cela va générer un ou plusieurs fichiers dans lib/migrations/doctrine/
exécuter
./symfony doc:migrate
cela va appliquer les migrations générées à la base de données
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.
Raccourci:
symfony doctrine:build --all-classes --and-migrate
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,
));
Model:
column:
type: enum
values: [one, two, three]
(optional:)
notnull: false
default: one #or two or three
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');
...
}
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'
)
)
);
}
- 1. jqGrid ajouter une nouvelle colonne
- 2. Ajouter une nouvelle colonne dans Infragistics Wingrid
- 3. Ajouter une nouvelle colonne dans une grande table mysql
- 4. MySQL colonne ENUM de la colonne anothertable
- 5. Comment ajouter une nouvelle colonne dans un fichier
- 6. MATLAB créer une nouvelle colonne
- 7. Créer une nouvelle colonne dynamiquement
- 8. Rails ne me laisse pas changer d'enregistrement pendant la migration
- 9. Comment ajouter une nouvelle entrée à une association multiple has_many?
- 10. Rails: une nouvelle migration, mais nul dans le contrôleur
- 11. Ajouter une nouvelle propriété dans la classe partielle subsonique
- 12. Créer une colonne d'ensemble avec la migration de base de données dans les rails
- 13. comment ajouter une nouvelle colonne à la clé primaire composite existante
- 14. Ajouter une nouvelle colonne dans la commande client Afficher les articles dans Magento Admin
- 15. Ajout de colonne à l'aide de la migration Subsonic 3.0.0.5
- 16. Comment décrire une colonne d'énumération dans une migration Rails 3?
- 17. Winforms. ObjectDataSource Ajouter une colonne calculée
- 18. SQL Server Ajouter une colonne
- 19. Déplacer la colonne dans une nouvelle table dans mysql
- 20. rake db: migrate ne détecte pas la nouvelle migration?
- 21. Sqlite Vue: Ajouter une colonne basée sur une autre colonne
- 22. Comment ajouter une relation dans une Doctrine Migration
- 23. simple bouton pour ajouter la colonne
- 24. Ajout d'une nouvelle colonne SQL avec une valeur par défaut
- 25. Créer une nouvelle colonne dans la base de données dans la colonne existante
- 26. Google Page Rank - Nouvelle migration de structure de domaine/lien
- 27. jqgrid ajouter une nouvelle ligne - pré-rempli
- 28. Android - Ajouter une nouvelle bibliothèque à repo?
- 29. Plugin Wordpress - ajouter une nouvelle page
- 30. Ajouter une nouvelle ligne: ListView vs DataGrid
besoin de faire ./symfony doc: generate-migrations-diff d'abord, je pense. – Populus