30 avr 2009
Tutoriel ACICRUD #2
Dans ce deuxième tutoriel sur l’utilisation de la librairie Acicrud nous allons voir comment lire des données depuis la base de données.
Comme expliqué dans les précédents billets, le principe d’Acicrud est d’ajouter une couche applicative objet dans les modèles afin de générer des objets fidèles au modèle de données représenté par la base de données.
Concrètement, Acicrud permet d’intéragir avec la base de données en manipulant directement des objets PHP.
Prérequis
Nous supposerons utiliser le modèle exemple précédemment créé dans le turoriel #1.
Nous supposerons également que notre table SQL est bâtie sur le modèle de donnée suivant :
Exemple { idExemple, title, description, date }
Lecture d’une ligne en base de données
La lecture d’une ligne se fait à partir de son identifiant (clé primaire) ou à partir d’un tableau associatif représentant la clause WHERE à utiliser (attention read est volontairement prévu pour lire une et une seule entrée), la méthode read() retourne un objet fidèle à la ligne en base de données :
<?php $this->load->model('exemple'); try { $o = $this->exemple->read(1); //Primary key id } catch(Exception $e) { echo "Wrong ID"; } var_dump($o); //Produces /* object(stdClass) (4) { ["idExemple"]=> string(2) "1" ["title"]=> string(8) "title..." ["description"]=> string(15) "description..." ["date"]=> string(19) "2009-04-30 21:00:00" } */ try { //Associative array method produces a custom WHERE clause. Be careful, read is intended to read one unique entry. $o = $this->exemple->read(array('title' => 'title...')); } catch(Exception $e) { echo "No result found."; } var_dump($o); //Produces /* object(stdClass) (4) { ["idExemple"]=> string(2) "1" ["title"]=> string(8) "title..." ["description"]=> string(15) "description..." ["date"]=> string(19) "2009-04-30 21:00:00" } */ ?> |
L’objet $o représente physiquement l’élément lu en base de données. Ses attributs portent les noms de champs et ses valeurs sont les données de la ligne.
Lecture de toutes les lignes d’une table en base de données
Il est très fréquent de devoir récupérer l’ensemble des données d’une table. Acicrud fournit une méthode pour cela s’appelant getAll().
Cette méthode prend trois paramètres optionnels qui sont $limit, $order et $where.
$limit permet d’effectuer un LIMIT SQL afin de limiter le nombre de lignes retournées par la requête, il suffit de passer un nombre.
$order est un tableau associatif qui permet de trier les données, par exemple pour trier par title ascendant, il faudra passer un tableau associatif :
array(‘title’ => ‘ASC’).
Il est également possible d’indiquer plusieurs tris : array(‘date’ => ‘DESC’, ‘title’ => ‘ASC’ ).
Le paramètre $where permet d’ajouter une clause WHERE personnalisée, il suffit de passer un tableau indexé de la même manière qu’avec la librairie Active Record de CodeIgniter.
La métode getAll() va retourner un tableau d’objets fidèles qui peuvent par exemple être facilement passés à une vue pour affichage.
<?php $this->load->model('exemple'); try { //Retrieve an array of objects, this array can be passed to a view for displaying data foreach($this->exemple->getAll(10, array('date' => 'DESC') as $row) { var_dump($row); //Produces /* object(stdClass) (4) { ["idExemple"]=> string(2) "the id" ["title"]=> string(8) "the title" ["description"]=> string(15) "the description" ["date"]=> string(19) "the date" } */ } } catch(Exception $e) { echo $e->getMessage(); } ?> |
Support and feedback are both available in English and in French.

Commentaires