Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > ORM > Doctrine
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/12/2010, 23h28   #1
Invité de passage
 
Inscription : septembre 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 7
Points : 0
Points : 0
Par défaut ajouter une table dans un fichier yaml et migration doctrine

Bonjour à tous,

je me suis mis depuis peu à doctrine, j'ai un soucis pour ajouter une nouvelle table avec la migration.

Je vais être amené à rajouter plusieurs tables / semaine pour un projet de dev d'applications.

Pour automatiser cette tâche j'utilise la migration, ça me génère les classes relatives aux tables, etc... (je précise que je ne suis pas sous symfony)

Code :
1
2
3
4
Doctrine_Core::generateMigrationsFromDiff('/home/djimbo/lib/migrations', 'schema_old.yml', 'schema.yml');
$migration = new Doctrine_Migration('/home/djimbo/lib/migrations', $conn);
//fait la migration
$migration->migrate();
Tout ça marche bien lorsque je veux ajouter des champs dans une table existante, mais si je souhaite rajouter une table dans mon schema, celle-ci sera crée dans la DB mais les classes correspondantes ne seront pas générées.

Je pense que ça doit être possible mais mes heures de googling n'ont rien données.

Si j'utilise la migration c'est dans un soucis de productivité, créer à la main les classes pour chaque tables rajoutées (chaque semaine) ou encore générer les classes à partir de la DB ne m’intéresse pas car trop rébarbatifs.

Pour le moment je n'ai juste qu'à modifier mon fichier schema.yml avec mes nouveaux champs pour la base existante et tout marche. me manque juste la création de nouvelles tables.

J'espère avoir été clair.
Merci d'avance à ceux qui pendront un peu de temps à me répondre.
Bonnes fêtes de noël,
tchernobill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2010, 13h59   #2
Membre éclairé
 
Inscription : août 2007
Messages : 360
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 360
Points : 334
Points : 334
Bonjour,

Si j'ai bien cerné ton problème :

http://www.doctrine-project.org/api/...mlFromDb%28%29

Cordialement,

Mathieu
mathieu44800 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/12/2010, 11h05   #3
Invité de passage
 
Inscription : septembre 2008
Messages : 7
Détails du profil
Informations forums :
Inscription : septembre 2008
Messages : 7
Points : 0
Points : 0
Citation:
Envoyé par mathieu44800 Voir le message
Bonjour,

Si j'ai bien cerné ton problème :

http://www.doctrine-project.org/api/...mlFromDb%28%29

Cordialement,

Mathieu
salut mathieu,

Malheureusement le lien que tu m'envois est une methode pour générer un fichier yaml de schema de base à partir de la base, ce qui est l'inverse de ce que je veux faire.

je ne veux pas avoir à ajouter les tables dans mysql et ensuite créer un schema yaml (pour ensuite generer des models doctrines pour les tables).
Je veux pouvoir modifier mon/mes schemas yaml et par la suite générer/updater les models et créer les tables/champs dans mysql, ce qui pourtant fonctionne à l'aide du code cité ci-dessus mise à l'exception de l'ajout d'une nouvelle table dans mon schema ymal qui créer bien la table dans mysql mais ne génère pas le model correspondant dans doctrine.

ça peut parraître compliqué mais je trouve le côté objet doctrine super mais le côté création DB vraiment bizarre, la majorité des exemples montrent comment partir d'une base ou l'on connait tous les champs de la table, apparement les créateurs n'ont pas pensés que l'on pouvait avoir besoin de rajouter une table en cours de route (bravo le côté évolutif...).

Doctrine 2 vient de sortir je vais essayer de voir si ce côté est mieux géré...

Merci pour ton temps

Joyeux noël,
tchernobill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 17h35   #4
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Bonjour,

peut-être en regénérant le model ?

Code :
1
2
 
Doctrine_Core::generateModelsFromYaml('repertoire_yaml','repertoire_model', array());
[EDIT]oulala ! j'avais pas vu la date du post... [/EDIT]
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 18h47   #5
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
La date du post n'est pas si loin que cela...

Et il n'est pas marqué comme résolu. Et les fêtes de noël m'ont fait louper la question

As-tu une solution ? Où on en reparle ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 21h21   #6
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
ben, je ne suis pas vraiment sûr d'avoir compris la question...

si on a 2 fichiers yaml, dont un nouveau, il suffit de lancer la méthode que j'ai cité au dessus pour générer les classes du modèle.

si on veut obtenir des classes héritées du model pour plus de souplesse, l'option generateTableClasses peut s'appliquer, ce qui nous donne :
Code :
Doctrine::generateModelsFromYaml('repertoire_yaml', 'repertoire_model', array('generateTableClasses' => true));
mais cela me semble trop simple pour que cela réponde à la question.
peut-être avec un peu plus d'information sur le besoin ...

__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 00h05   #7
Modérateur
 
Avatar de Michel Rotta
 
Homme Michel Rotta
Responsable d'exploitation informatique
Inscription : septembre 2005
Messages : 4 913
Détails du profil
Informations personnelles :
Nom : Homme Michel Rotta
Âge : 49
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Responsable d'exploitation informatique
Secteur : Distribution

Informations forums :
Inscription : septembre 2005
Messages : 4 913
Points : 7 505
Points : 7 505
La question n'était pas pour toi.

En principe, quant tu développes tu as de nombreuses base pour un même projet. Elle ne sont pas nécessairement toutes au même niveau.

Tu vas avoir un ensemble de 3 bases sur ton poste :
  • une pour développer et tester le développement
  • une pour les tests automatiques
  • une plus importante pour tester les fonctionnalités et l'interface (que je distingue du développement pur, mais qui peut être confondue).

Ensuite tu vas encore avoir deux bases sur un serveur (ou deux serveurs) :
  • une pour les validations de modification
  • et enfin une pour la production

Quant tu fais un changement de structure de la base, tu vas avoir à gérer plusieurs versions de chacune des bases. Ne serais-ce que pour pouvoir, durant le développement, éventuellement maintenir l'existant dans le cas où il y aurait un bug urgent à corriger. C'est pas le top, mais c'est courant.

Tu vas donc modifier ton schema, générer une nouvelle base de travail pour la nouvelle version applicative et développer dessus.

Quant sera venu le temps des migrations, tu vas pouvoir te servir ce ces différentes bases pour créer une méthode de migration doctrine montante au moins, descendante au mieux. Ces méthodes doivent pouvoir modifier ajouter de nouvelles colonnes, modifier les existantes, créer des tables. Elles doivent aussi, dans la mesure du possible préserver les données existante et, le cas échéant, repeupler la base modifiée au mieux. Il convient de tester soigneusement ces deux méthodes avant de les utiliser sur les serveur de validation et de production.

La question qui restait en suspend était, mais ces méthodes ne me crées pas les objets du modèle ! Et bien c'est normal, ce n'est pas leur rôle. Elle ne doivent intervenir que sur les données. Dans tous les cas, nouvelles structures implique nouveau programme, donc mise à jour aussi des script, donc des modèles donc cela va marcher (normalement, mais c'est alors un problème de développeur, plus de doctrine).

CQFE (Ce Qu'il Fallait Expliquer).
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
  • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
  • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
  • Une discussion est terminée ? Alors le bouton est votre ami !
Michel Rotta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 00h39   #8
Membre Expert
 
Avatar de ska_root
 
Homme
Développeur informatique
Inscription : août 2005
Messages : 1 179
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Service public

Informations forums :
Inscription : août 2005
Messages : 1 179
Points : 1 580
Points : 1 580
Merci de m'avoir répondu !
__________________
http://cdemarche.developpez.com/

Tu as la réponse à ta question ? N'oublies pas le petit en bas à gauche de ton message...
ska_root est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h05.


 
 
 
 
Partenaires

Hébergement Web