TP07: ORM
Un ORM est une technique de programmation informatique qui crée l'illusion d'une base de données orientée objet à partir d'une base de données relationnelle en définissant des correspondances entre cette base de données et les objets du langage utilisé. On pourrait le désigner par « correspondance entre monde objet et monde relationnel ».
Découverte de Paris
Paris est un ORM PHP open source disponible à cette adresse, il se base sur idiorm. Ce TP est une introduction à l'installation et l'utilisation de Paris. Je ne peux que vous encourager à aller consulter la documentation de celui-ci.
Installation
Comme toujours un simple composer require j4mie/paris
La base de données
Après avoir installé le package j4mie/paris
il suffit de configurer une connexion à notre base de données. Pour la suite de ce TP nous allons utiliser la base de données SQLite ingen.sqlite3.
Configuration
Nous allons utiliser une capacité spéciale de Flight, le filtering pour ajouter un traitement avant que le framework ne traite notre requête.
Nous allons donc ajouter la connexion automatique à notre basse de données avant que celui-ci ne soit démarré (ce code doit être placé juste après l'enregistrement de l'extension Twig):
<?php Flight::before('start', function(&$params, &$output){ ORM::configure('sqlite:ingen.sqlite3'); });
Notre premier Model
Dans le dossier src créer le fichier models.php, pensez à l'ajouter au composer.json
<?php class Dinosaur extends Model { public static $_table = 'Dinosaurs'; }
Voilà ! Notre model est créé, à nous de l'utiliser !
Il est inutile de préciser la nature de notre table, l'ORM se chargera pour nous de déduire la structure de nos objets à partir de la base de données. Le mapping de nos champs se fait automatiquement à partir de la structure de notre table. Ainsi il sera possible d'accéder au champ name d'un dinosaure via l'attribut name qui sera automatiquement généré lors de l'éxécution par l'ORM.
Par convention, les champs de nos tables ne doivent contenir ni préfixe, ni suffixe, les alias ont cette utilité ! De plus la clé primaire (unique) de notre table sera toujours nomée par convention id.
Requête via un Model
Pour plus d'informations sur la manière d'écrire des requêtes, je vous invite à vous rendre à cette page de la documentation.
Dans le fichier index.php
nous allons créer une route pour afficher l'ensemble des dinosaures au sein d'un fichier de vue dinos.twig.
Voici le code permettant de récupérer l'ensemble des dinosaures présent en base:
<?php Dinosaur::find_many();
Cette ligne permet de récupérer tout les articles présent en bases. A vous maintenant d'itérer sur le tableau retourner afin d'obtenir une liste des articles au sein de votre vue.
À vous de jouer
- Créer les classes dans le fichier models.php pour les modèles et espèces,
- Créer une route pour lister tous les modèles et espèces présent en base,
- Récupérer les informations du modèle et de l'espèce pour chaque dinosaure, cf la documentation sur les associations.
- Créer une vue pour afficher uniquement les informations d'un seul dinosaure en prenant en paramètre
@id
l'identifiant du dinosaure cf la partie sur le requêtage de la documentation.
Conclusion
Nous venons de voir que manipuler une base de données est extrèmement simple avec les bons outils, je vous invite donc à lire la documentation de Paris notamment sur la partie Querying.