Lorsque vous développez avec Symfony 1.4 et Doctrine, il devient vite laborieux de gérer manuellement son schéma de base de données (en éditant le fichier conf/doctrine/schema.yml) lorsque celui-ci commence à être relativement conséquent et complexe. Pour aller dans le même sens, Oracle continue le développement de MySQL Workbench, un outils gratuit pour éditer vos modèles conceptuels de données (et bien plus, même s’il n’est pas des plus stables sur Mac OS).
Cet outils étant quand même beaucoup plus orienté MySQL que Doctrine, l’export du schéma vers doctrine n’est pas compris dans l’outils. Mais Johannes Müller, dev’PHP de son état, a eu la merveilleuse idée de développer un plugin pour ça. La mauvaise nouvelle c’est que le plugin n’est plus maintenu (les raisons sont multiples et la première évoquée par Johannes est que les plugins MySQL Workbench sont à développer en LUA – et il faut l’avouer le LUA c’est comme dirait l’autre, pain in the ass). La bonne nouvelle c’est que j’y ai quand même apporté 2 toutes petites modifs pour régler un petit soucis et ajouter un fonctionnalité. Mauvaise nouvelle, j’ai pas l’intention de maintenir le bouzin, juste de vous le donner en l’état et d’en faire bon usage, ou d’y apporter vos motifs. A noter que Johannes à fait commencé un nouvel outils standalone pour convertir vers plus d’ORM (je dois avouer que je ne l’ai pas testé, ce plugin me convient pour en l’état, pour l’instant).
Enfin ne rêvez pas non-plus, pas de reverse-engineering : vous ne pourrez pas passer du YAML au schéma MySQL Workbench (par contre MySQL Workbench permet le reverse engineering à partir de la base de donnée directement, ou de puis un script MySQL).
Niveau documentation, je vais quand même détailler quelques points, mais je vous laisse le soin d’aller consulter la doc de base du plugin qui est quand même assez bien fournie.
Installation du plugin
Pour ça rien de plus simple : téléchargez le fichier en fin d’article, décompressez-le, démarrer MySQL Workbench, allez dans « Scripting » > « Install Plugin/Module… », sélectionnez le fichier fraîchement téléchargé, installez et redémarrez MySQL Workbench.
Export
Une fois votre schéma terminé, vous pourrez l’exporter en YAML soit dans le presse papier soit dans un fichier directement. Pour procéder aller dans « Plugins » > « Catalog » puis sélectionnez l’option qui vous va le mieux :
Fonctionnalités de Doctrine
Doctrine permet l’ajout de certaines fonctionnalités, comme le « Timestampable ». Pour rajouter ce genre de comportement dans votre schéma, ça passe par les commentaires sur la table (oui on peut rêver plus sexy, mais bon…). N’oubliez pas de respecter l’indentation. Voici par exemple comment configurer la table Config pour les objets doctrine soient timestampables (c’est pareil avec le sluggable etc.) :

{doctrine:actAs}
actAs:
Timestampable: ~
{/doctrine:actAs}Les relations
C’est la partie que j’ai rajouté et qui n’est donc pas documenté. Dans sa dernière version par Johannes, le plugin ne permet de gérer directement les relations. Pas grave me direz-vous si les tout est dans le schéma. Certes, mais si vous utilisez des plugins Symfony qui créent des tables, vous ne devez pas les inclure dans votre schéma (la création des tables avec Symfony ne fonctionnera pas, et de façon générale c’est pas super propre car c’est pas à vous de gérer ces tables). Je parle des plugins car si vous utilisez par exemple le plugin sfDoctrineGuard pour gérer vos utilisateurs et que vous souhaitez ajouter par exemple un profil à ces utilisateurs ou les ajouter en temps qu’auteur d’un article sur votre système de blog (ce qui est à l’origine de mon ajout), vous devez gérer la relation à la main. La technique est la même qu’avec les « actAs » précédemment décrits. Ajoutez ceci comme commentaire à votre table (la relation s’appellera auteur dans une table nouvelles, avec un champs auteur_id – de type INTEGER non-null – qui aura comme valeur le champs id de la table sfGuardUser créée par sfDoctrineGuard) :
{doctrine:relations}
auteur:
class: sfGuardUser
foreignType: one
local: auteur_id
foreign: id
{/doctrine:relations}Conclusion
Voilà je crois que tout a été dit, il ne vous reste plus qu’à télécharger le plugin au plus vite. Have fnu coding!
Télécharger le fichier
MySQL Workbench Doctrine Plugin v0.4.2
Références
- MySQL Workbench
- GoogleCode de MySQL Workbench Doctrine Plugin, le projet initial
- Documentation de MySQL Workbench Doctrine Plugin
- Github du nouvel outils de Johannes Müller












Attention, alerte de sécurité Google quand on accède à votre site depuis le moteur de recherche (je recherchais « schéma conceptuel phpmysql » avant d’arriver ici). A bon entendeur !
Merci bien Thomas.
Nous allons regarder ça rapidement alors …
Bonne journée à toi.
Il semblerait que l’archive fournit ne soit pas « dézipable »
Merci (et désolé), je regarde ça dès ce soir.
Update : c’est bon, c’est le plugin qu’on utilise pour afficher le téléchargement qui corrompt le fichier.