09 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 tweets.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:tweets.sqlite3');
});
Notre premier Model
Dans le dossier src créer le fichier models.php, pensez à l'ajouter au composer.json
<?php
class User extends Model {
public static $_table = 'Users';
}
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 utilisateur 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 utilisateurs au sein d'un fichier de vue users.twig.
Voici le code permettant de récupérer l'ensemble des utilisateurs présent en base:
<?php
User::find_many();
Cette ligne permet de récupérer tout les utilisateurs présent en bases. A vous maintenant d'itérer sur le tableau retourner afin d'obtenir une liste des utilisateurs au sein de votre vue.
À vous de jouer
- Créer la classes dans le fichier models.php pour les tweets,
- Créer une route pour lister tous les tweets présent en base,
- Récupérer les tweets de chaque utilisateur, cf la documentation sur les associations.
- Créer une vue pour afficher uniquement les informations d'un seul utilisateur en prenant en paramètre
@username
le nom d'utilisateur cf la partie sur le requêtage de la documentation. - Créer une vue pour afficher un formulaire permettant d'ajouter un tweet en base.
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.