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.