Exporter un modèle conceptuel de MySQL Workbench vers Doctrine (YAML)

Alexandre Lacoche 9 décembre 2011 4
Exporter un modèle conceptuel de MySQL Workbench vers Doctrine (YAML)

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

4 Commentaires »

  1. Thomas 14 décembre 2011 au 14 h 03 min - Reply

    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 !

    • Benjamin Longearet
      Benjamin Longearet 14 décembre 2011 au 14 h 48 min - Reply

      Merci bien Thomas.
      Nous allons regarder ça rapidement alors …

      Bonne journée à toi.

  2. Skitoo 15 décembre 2011 au 15 h 07 min - Reply

    Il semblerait que l’archive fournit ne soit pas « dézipable »

    • Pierre CLÉMENT 15 décembre 2011 au 15 h 31 min - Reply

      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.

Laissez un message »