Introduction:

Un ORM (Object-relational mapping) est utilisé dans la programmation orienté objet afin de créer virtuellement un modèle en se basant sur une base de donnée. Cela évite de devoir écrire les requêtes dans la base de donnée soit même, un vrai gain de temps.

Contexte:

Le framework CodeIgniter possède un modèle MVC (Modèle-Vue-Controleur). Pour la partie Modèle, il faut l’écrire quasi totalement bien que le framework prévoit les getters et setters automatiquement.

Voici une modèle véhicule:

class Vehicule extends CI_Model {
    var $color   = “;
    var $model = “;
    var $price    = “;

function __construct(){
     // Call the Model constructor
     parent::__construct();
}

function get_last_ten_entries()     {
     $this->load->database();
     $query = $this->db->get('entries', 10);
     return $query->result();
}

Sur ce modèle, on a une requête sur la base de données qui nous renvoie les dix dernières entrées. Pour l’exemple je l’ai laissé ici bien qu’on puisse la placer dans le controleur. Imaginez avoir 15 fonction différentes avec des “WHERE” des “LIKE” et autres, comment faire pour en écrire le minimum et avoir des requêtes performantes.

Nous allons voir comment en faire autant avec l’ORM.

Installation:

Les deux ORM principalement connus sont Doctrine et DataMapper, j’ai choisi d’intégrer DataMapper qui m’a semblé plus facile d’intégration dans CodeIgniter.

Vous le trouverez en suivant ce lien : téléchargement.

Ils proposent deux types d’installation, je vous propose de faire la “version longue”: installation.

Utilisation:

Reprenons notre véhicule:

class Vehicule extends DataMapper{
     var $table = ‘vehicules’;
 }

Je n’ai précisé que le nom de la table. Voyons comment on requête alors dans notre controleur:

class VehiculeController extends CI_Controller {
     public function index(){
         $vehicule = new Vehicule();
         $array = $vehicule->where(‘price’, ‘2000’)->get();
         var_dump($array);
     }
}

On vient de récupérer facilement les véhicules dont le prix est égale à 2000€. Voyons comment faire des requêtes plus complexes:

public function getSomeVehicule(){
    $colors = array(‘blue’, ‘yellow’, ‘red’);
    $vehicule = new Vehicule();
    $vehicule->like(‘model’,‘ford’);
    $vehicule->where(‘price < ‘, ‘50000’);
    $vehicule->where_in(‘color’, $colors);
    $array = $vehicule->get();

var_dump($array);

}

Traduction de notre dernière fonction: nous récupérons les véhicules dont le modèle comprend la chaine “ford”, dont le prix est inferieur à 5000€ et dont la couleur est soit bleue, jaune ou rouge.
Les requêtes sont tout aussi bien traitées, et la synthaxe est simple à relire. J’ai vraiment apprecié cette utilisation.

D’autres utilisations plus poussées de l’ORM sont possible (renvoie sous forme de tableau, en format json, etc.), les différentes fonctions basiques ont suffit à me convaincre.

Conclusion:

Facile d’intégration, simplicité d’utilisation, DataMapper est vraiment utile sur des projets de toutes tailles. Il prouvera, d’après moi, plus son utilité sur des projets lourds afin d’automatiser la gestion des requêtes de base de données.

C’était une première pour moi dans la découverte d’ORM et DataMapper est loin de m’avoir déçu.

Pour en savoir encore plus sur l’utilisation: le guide utilisateur.