2009-12-08 3 views
0

Quelle est la manière standard d'ajouter un nouveau modèle à mon application construit sur Symfony + Doctrine tout en conservant tous les modèles précédents et leurs métadonnées (comme les relations).Idiome standard pour ajouter de nouveaux modèles à une application basée sur Symfony + Doctrine

Qu'est-ce que je cherche vraiment: Une commande/procédure qui sera équivalent de ./script/generate model FooModel dans Ruby on Rails (qui n'a pas toute sorte de modèles reset db/reset tout en générant)

Si ces deux sont des choses différentes, et je chasse le mauvais fantôme (je voudrais penser que je ne le suis pas), s'il vous plaît faites le moi savoir.

EDIT: Mise à jour de la question.

+0

Comment construire de nouveaux modèles et remplacer ceux qui existent déjà? sauf si vous donnez les mêmes noms. – yoda

+0

Non, je veux dire 'build: all' écrase toutes les fonctionnalités que j'ai fournies dans les classes de base. – Swanand

Répondre

1

processus standard est d'ajouter le nouveau modèle et les relations dont il a besoin pour schema.yml

ensuite faire ./symfony doctrine: build-all (ou: build --all pour symfony 1.3/1.4)

Comme le dit richsage, vous ne devriez pas éditer les classes de base, donc cette opération est totalement non destructive.

Doctrine a également une fonctionnalité pour les migrations afin que vous une mise à jour du schéma de base de données facilement déployer le nouveau code en production:

http://www.doctrine-project.org/documentation/cookbook/1_0/en/symfony-and-doctrine-migrations

versions plus récentes de la doctrine (1.1 +, symfony 1.3+) comprennent la tâche generate-migrations-diff, qui peut créer des migrations pour vous. Ceci est couvert très bien ici:

Extra changeColumns in Doctrine generate-migrations-diff

[edit: l'auteur de la question ci-dessus a copier/coller ci-dessous et maintenant]

3

Vous ne devriez pas être surchargez les classes de base, car ceux-ci seront principalement générés automatiquement chaque fois que vous faites build:all ou doctrine:build-model etc. Utilisez les classes générées dans le répertoire lib/modèle par exemple YourModel.class.php si vous voulez pour ajouter de nouvelles méthodes etc. Ensuite, vos nouveaux modèles seront générés à côté de vos existants.

+0

Vous avez raison, je les ai tous retirés des classes de base. Maintenant, gérer à travers schema.yml – Swanand

0

La generate-migrations-diff ne diff deux différents fichiers yaml. Il compare réellement vos modèles et votre fichier yaml, puis génère une migration basée sur les différences. Si vous commencez à partir d'un db qui est en phase avec votre YAML et les classes, votre flux de travail pour modifier le schéma doit être:

  1. fichier Change yaml
  2. Run generate-migrations-diff à diff votre position actuelle (changé) yaml avec vos modèles (inchangés). Cela générera un fichier de migrations dans votre répertoire doctrine/migrations (ou quel que soit le paramétrage de migrations_path dans votre config doctrine).
  3. Run migrer pour exécuter la migration créée à l'étape 2 et modifier votre base de données
  4. Run-générer des modèles-yaml pour générer de nouvelles classes en fonction de votre fichier YAML. Ceux-ci vont là où vous avez spécifié vos modèles générés vont (models_path dans votre config doctrine).
  5. Exécutez generate-sql pour générer un fichier SQL. Cela ira là où votre doctrine sql_path config est définie.
Questions connexes