DY

DelahayeYourself

modules / UE3.4.II /

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.

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

  1. Créer les classes dans le fichier models.php pour les modèles et espèces,
  2. Créer une route pour lister tous les modèles et espèces présent en base,
  3. Récupérer les informations du modèle et de l'espèce pour chaque dinosaure, cf la documentation sur les associations.
  4. 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.
  5. Créer une vue pour afficher un formulaire permettant d'ajouter un dinosaure 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.