DY

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.

Ingen UML Database Scheme
Diagramme UML de la base de données de tweets
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

  1. Créer la classes dans le fichier models.php pour les tweets,
  2. Créer une route pour lister tous les tweets présent en base,
  3. Récupérer les tweets de chaque utilisateur, cf la documentation sur les associations.
  4. 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.
  5. 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.