L'API ActiveRecord du framework WdCore
Posté : 02 févr. 2011, 17:07
Adoptant ce que propose le framework Rails pour le langage de programmation Ruby, le framework WdCore offre une API permettant de manipuler les enregistrements en base de données comme de simples objets. On peut ainsi créer des tables, ajouter des enregistrements, les modifier, les supprimer sans jamais avoir à saisir la moindre commande SQL. Cet article a pour but de présenter les méthodes permettant de récupérer un objet, ou une collection d'objets, depuis une base de données, mais aussi de spécifier l'ordre dans lequel les objets sont récupérés, comment les grouper, ou encore comment ne récupérer que certains champs.
Si vous êtes intéressé par une approche totalement objet de la gestion de données, peut-être que mon article Récupérer des données depuis une base en utilisant l'API ActiveRecord du framework WdCore vous donnera des idées. Voici quelques exemples très courts, montrant ce que l'API proposée par le framework WdCore permet de faire :
Obtenir des objets :
Si vous êtes intéressé par une approche totalement objet de la gestion de données, peut-être que mon article Récupérer des données depuis une base en utilisant l'API ActiveRecord du framework WdCore vous donnera des idées. Voici quelques exemples très courts, montrant ce que l'API proposée par le framework WdCore permet de faire :
Obtenir des objets :
$record = $model[10];
# ou
$record = $model->find(10);
$records = $model->find(10, 15, 19);
# ou
$records = $model->find(array(10, 15, 19));
Conditions :
$model->where('is_online = ?', true);
$model->where(array('is_online' => true, 'is_home_excluded' => false));
$model->where('siteid = 0 OR siteid = ?', 1)->where('language = '' OR language = ?', "fr");
# Sous-ensembles
$model->where(array('order_count' => array(1, 2, 3)); # IN
$model->where(array('!order_count' => array(1, 2, 3)); # NOT IN
# Filtres dynamiques
$model->find_by_nid(1);
$model->find_by_siteid_and_language(1, 'fr');
# Portées
$model->visible;
Grouper, ordonner :
$model->group('date(created)')->order('created');
$model->group('date(created)')->having('created > ?', date('Y-m-d', strtotime('-1 month')))->order('created');
Limites et décalage :
$model->where('is_online = 1')->limit(10); // retourne les 10 premiers enregistrements
$model->where('is_online = 1')->limit(5, 10); // retourne les enregistrements 6 à 16
$model->where('is_online = 1')->offset(5); // retourne les enregistrements de 6 jusqu'au dernier
$model->where('is_online = 1')->offset(5)->limit(10);
Sélection de champs :
$model->select('nid, created, title');
$model->select('nid, created, CONCAT_WS(":", title, language)');
Jointures :
$model->joins('INNER JOIN contents USING(nid)');
$model->joins(':contents');
Récupérer les données :
$model->all;
$model->order('created DESC')->all(PDO::FETCH_ASSOC);
$model->order('created DESC')->mode(PDO::FETCH_ASSOC)->all;
$model->order('created DESC')->one;
$model->select('nid, title')->pairs;
$model->select('title')->rc;
Tester l'existence d'objets :
$model->exists;
$model->exists(1, 2, 3);
$model->exists(array(1, 2, 3));
$model->where('author = ?', 'madonna')->exists;
Fonctions de calcul :
$model->count;
$model->count('is_online');
$model->average('score');
$model->minimum('age');
$model->maximum('age');
$model->sum('comments_count');
Bref, de quoi faire, puisqu'en on peut tout mélanger dans n'importe quel sens :$model->select('nid, title')->joins(':user.users')->where('is_online = 1 AND (site = 0 OR site = ?) AND (language = "" OR language = ?)', 1, 'fr')->group('YEAR(created)')->order('user.last_connection, title')->limit(10, 20)->pairs;
Pour en savoir plus, merci de consulter mon article : Récupérer des données depuis une base en utilisant l'API ActiveRecord du framework WdCore.