2010-01-22 10 views
5

J'ai recherché un moyen d'obtenir les instructions SQL générées par un fichier de migration généré. Cela étend Doctrine_Migration_Base. Essentiellement, je voudrais enregistrer le SQL en tant que scripts de changement. Le chemin d'exécution m'amène à Doctrine_Export qui a des méthodes qui construisent l'instruction SQL et les exécutent. Je n'ai trouvé aucun moyen de les demander seulement. Les méthodes d'exportation trouvées dans Doctrine_Export fonctionnent uniquement sur les modèles Doctrine_Record et non sur les scripts de migration.Obtention du code SQL à partir d'une migration Doctrine

Depuis la ligne de commande './doctrine migrer la version #' le chemin va:

  • Doctrine_Cli :: run (cmd)
  • Doctrine_Task_Migrate :: setArguments (args)
  • Doctrine_Task_Migrate :: execute()
  • Doctrine_Migration :: émigrent (à)
  • Doctrine_Migration_Process :: Doctrine_Export :: divers créer, supprimer, modifier les méthodes avec sql equi valents.

Quelqu'un at-il abordé cela avant? Je ne voudrais vraiment pas changer les fichiers de base de Doctrine. Toute aide est grandement appréciée.

Répondre

0

Compte tenu de Rob suggestion de Farley, je modified:

  • Doctrine_Core :: migrer
  • Doctrine_Task_Migrate :: execute

Lorsque la méthode d'exécution est appelée l'argument optionnel 'DryRun' est vérifié. Si vrai , une instance 'Doctrine_Connection_Profiler' est créée. La valeur 'dryRun' est ensuite passée à la méthode 'Doctrine_Core :: migrate'. La valeur 'dryRun' de true permet d'annuler les modifications une fois l'exécution des instructions SQL terminée. Lorsque la méthode revient, le profileur est analysé et les instructions SQL non vides ne contenant pas 'migration_version' sont sauvegardées et affichées sur le terminal.

0

Pourriez-vous créer un serveur de dev, et faire la migration là-dessus, en stockant une trace SQL au fur et à mesure, vous n'avez pas besoin de conserver les résultats, mais vous obtiendrez une liste de toutes les commandes.

+0

Intéressant. Je vais examiner cela et revenir à vous. Je pense que je pourrais devoir modifier les fichiers Doctrine de base de toute façon car leur implémentation CLI fait défaut. Il existe une option dryRun que Doctrine_Task_Migrate ne vérifie même pas. Fondamentalement les 2 options que je vais pour sont: Ajoutez l'option dryRun, exécutez une migration avec dryRun et SQL Trace pour capturer les déclarations. Ou Avec l'option dryRun, ajoutez une autre option pour afficher simplement les instructions SQL , ce qui nécessiterait un fichier Doctrine_Migration_Process modifié, peut-être que je l'appellerai Doctrine_Migration_GetSQL. –

+0

Sons valables. SQL Trace est certainement un bon moyen d'obtenir les commandes. –

Questions connexes