PHP : db_2_classes
Je viens d’attaquer un projet perso, et me suis lancé dans un petit framework maison (from scratch). Ce framework est en MVC et repose sur des classes. Dans mon esprit, chaque classe doit comporter ses propres variables, ainsi qu’un moyen de la situer par rapport aux autres classes.
Il existe des solutions pour définir les jointures entre les classes. Par exemple dans Symfony, il existe des fichiers de configuration (en yml). On définit son modèle, on lance un p’tit script et « HOP ! », voici de belles classes de bases prêtes à être héritées.
Autrement, il existe la solution de Kohana, qui consiste à indiquer les relations dans chaque classe, manuellement.
Bref, les solutions existent, toutefois le truc que je trouve lourdingue, c’est de faire coller en permanence les classes avec les tables en bases de données. En cours de développement, mes tables et leurs champs bougent beaucoup. Du coup, il faut systématiquement que je reporte chaque modification dans la classe qui va bien…
Partant du principe que la base de données comporte déjà toutes les infos nécessaires. Je me suis dit qu’il serait possible d’extraire les informations inclues dans chaque tables, et de reporter ces infos dans des classes en PHP. C’est déjà un premier pas : lister les champs de la table… En fouillant un peu, je détermine les champs primaires, et je peux même typer mes variables (en quelque sorte …).
Tout ça c’est bien, mais en m’imposant une convention de nommage, j’arriverai même à esquisser des jointures et des tables pivots détectables facilement depuis un script.
Par exemple :
p_table1_table2 est la table pivot entre table1 et table2.
Le résultat, c’est une petite classe, composée de quelques méthodes statiques qui :
- Analyse une base de données, donnée
- Détermine les relations entre les tables
- Génère un script PHP par table (hors pivots)
Désormais, quand je développe :
- Modifs dans la base de données
- Exécution de mon script
- Mes classes sont à jours ^^
J’offre ce code à qui en a besoin. Le tout est livré sous licence BeerWare, car si mon code vous plait et qu’on se croise, libre à vous de me payer un boc
Le zip ci-joint contient la classe, ainsi qu’un petit exemple et ma méthode d’écriture des scripts PHP (libre à vous de la changer ^^).