Présentation

RedBean est un ORM (object-relational mapping) PHP. Il permet, comme tout ORM, de convertir les données relationnelles en objets et vice-versa. Il existe pléthore d'outils de ce style, nous pouvons citer par exemple Doctrine (un des plus connus, notamment utilisé avec Smfony), POG (PHP Object Generator) et Propel

Le principe de fonctionnement est le suivant :

ORM

L'ORM est capable de générer des objets (manipulables en PHP) à partir du schéma de la base de données. Les objets ainsi créés disposent d'attributs (champs de la base) et de méthodes (CRUD). Ce type d'outil permet d'interagir rapidement et facilement avec la base de données. Redbean possède un gros avantage : il est capable de créer le schéma directement depuis le code PHP, nous aborderons cet aspect dans ce tutoriel.

Un peu de pratique

Tout d'abord il faut importer redbean dans votre projet. Téléchargez les sources sur le site officiel de Redbean et ajoutez le fichier (php ou phar en fonction des versions) à votre projet :

require 'rb.php';

Vous pouvez maintenant commencer à jouer avec Redbean ! Configurez la base de données (créée au préalable) :

 R::setup('mysql:host=localhost;dbname=redbean_test','user','pwd');

Pour ce petit tutoriel nous allons créer une application permettant de gérer des utilisateurs et des notes. Le but étant ici de manipuler Redbean, aucune interface visuelle ne sera développée, nous nous concentrerons simplement sur quelques extraits de code PHP.

Comme dit précédement, avec redbean, nous n'avons pas besoin de créer les tables directement dans la base de données. Ainsi, le code suivant va nous permettre de créer un utilisateur et donc, la table associée :

$utilisateur = R::dispense('utilisateur');
$utilisateur->nom = 'Bosse';
$utilisateur->prenom = 'Hugo';
$idUser = R::store( $utilisateur )

Quelques explications :

  • La méthode "dispense" permet de créer un nouveau "bean", autrement dit un nouvel objet
  • La méthode "store" permet d'enregistrer le "bean"

Une fois le code précédent exécuté, consultez votre schéma de base de données, et là, surprise (ou pas, si vous avez suivi ^^)  :

database

Créons maintenant une note à l'aide du code suivant :

$note = R::dispense('note');
$note->title = 'Titre de la note';
$note->content = "<p>Lorem ipsum</p>";
$id = R::store( $note );

Nous disposons à présent de deux objets : un utilisateur et une note. Nous allons donc voir comment lier ces deux objets via une relation de type "one-to-many" :

$utilisateur = R::load('utilisateur', 1);
$note = R::load('note', 1);
$utilisateur->ownNoteList[] = $note;
R::store( $utilisateur );

Quelques explications :

  • La méthode "load" permet de charger les objets
  • L'attribut "ownNoteList[]" permet de lier la note à l'utilisateur 
  • La méthode "store" permet de mettre à jour les enregistrements

Voici ce que l'on obtient au niveau de la table "note" : 

note

On remarque qu'un nouveau champ permettant de stocker l'identifiant de l'utilisateur est apparu dans la table (relation de type one-to-many). Le mot clé "own" (ownNoteList) est obligatoire et permet d'illustrer la notion de possession (relation). Vous trouverez plus d'informations sur les relations dans la documentation officielle.

Une fois votre développement terminé, il est nécessaire de "bloquer" la mise à jour du schéma grâce à la méthode suivante :

R::freeze( TRUE );

Cette petite introduction à Redbean est terminée. Pour conclure, je dirai qu'il s'agit d'un outil simple à manipuler. Il peut être utile notamment pour mettre en place un prototype car il n'est pas nécessaire de gérer le schéma de la base de données. En revanche, dans le cadre d'une application destinée à la mise en production, il est indispensable de faire une passe sur le schéma afin de l'optimiser (index, clés…).