RedBean est un outil permettant de mettre en place rapidement une ORM avec PHP.
ORM ou Object Relationnal Mapping est un design pattern incontournable du paradigme de la programmation objet et qui permet de faire le lien entre une base de données relationnelle et des objets. Mais qu’est-ce que Redbean ? Rien de tel qu’une petite démonstration :

Tout d’abord, récupérons une instance du Noyau de Redbean :

$toolbox = RedBean_Setup::kickstartDev( "mysql:host=localhost;dbname=oodb","root","password" );
$redbean = $toolbox->getRedBean();

RedBean est capable de découvrir seul la structure de la base de données. Pas de fichier de configuration donc et c’est ce qui fait sa force (et la source de ses faiblesses ?).
RedBean est capable de modifier à la volée la structure de la base de données. Il est néanmoins possible de bloquer cette option :

$redbean->freeze();

Le but de Redbean est simple : on crée un objet et Redbean le persiste en base de données pour nous. Les objets échangés avec Redbean sont appelés des « Beans ». Un Bean peut avoir de multiples propriétés qui sont toutes publiques.
Un Bean est typé à la volée :

$client = $redbean->dispense("client");

Il est très facile de donner des valeurs aux propriétés et de persister le bean en base de données :

$client->nom = "Wayne";
$client->prenom = "John";
$id = $redbean->store( $client );

A ce stade la magie a déjà opéré : une table « client » a été créé à la volée avec trois colonnes de type appropriés (nom, prenom et id) et un enregistrement John Way a été inséré.

Toutes sortes d’opérations sont ensuite possibles :

// Récupérer un bean
$client = $redbean->load("client",$id);

// Mettre à jour un bean
$client->prenom = "Scott";
$redbean->store( $client );

// Supprimer un bean
$redbean->trash( $client );

Bon jusque là ok. Mais voyons rapidement ce que nous réserve la suite :
Gestion des relations entre beans :

// Création de du gestionnaire d'association
$a = new RedBean_AssociationManager( $toolbox );

//Association entre deux beans
$a->associate($commande, $client);

//Récupérer toutes les commandes associées à un client
$keys = $a->related($client, "commande" );

//Etc : Suppression en cascades, relations 1..N, Arbre, etc.

Recherche de beans :

// Recherche de beans
$clients = Finder::where("client", " prenom LIKE :str ", array(":str"=>'%more%'));

// Ou plus classiquement
$keys = $adapter->getCol("SELECT id FROM client WHERE `prenom` LIKE '%John%'");

De nombreuses autres fonctionnalités sont disponibles et je vous invite à aller visiter le site du projet : http://www.redbeanphp.com/

Qu’en pensez vous ? Avez-vous testé cet outil ? Est-il prêt pour un usage professionnel ? Est-ce l’ORM idéal pour des petits projets ?