Introduction
Les DAO dans Copix sont un moyen pour dialoguer avec la base de données rapidement et sans effort. En effet, Copix va générer pour vous toutes les requêtes SQL classiques sur une table donnée dans un objet prêt à l'emploi.
Vous pouvez demander à Copix un DAO soit à partir d'un fichier XML, soit simplement à partir du nom d'une table.
Au besoin, vous pourrez écrire des méthodes spécifiques en PHP qui feront partie de l'objet CopixDAO.
Un exemple concret et complet de l'utilisation des DAO :
$enregistrement = _dao ('maTable')->get ('clef_primaire');
Structure
Dans Copix, nous avons implémenté cet élément sous une forme simple que nous avons voulue efficace :
- Une fabrique (CopixDAOFactory) pour instancier les DAO. Cette fabrique dispose d'un alias (_dao () ou _ioDAO ())
- Les "DAO" qui implémentent les dialogues avec la base (insertion, modification, récupération, recherche, ...)
- Les "DAORecords" qui sont des représentations objets des enregistrements.
Méthodes standard
Les DAO disposent, en standard des méthodes suivantes :
- get? pour récupérer un enregistrement à partir de sa clef primaire
- insert? pour insérer un enregistrement
- update? pour mettre un enregistrement à jour
- delete? pour supprimer un enregistrement à partir de sa clef primaire
- findAll? pour récupérer le contenu complet de la table
- findBy? pour récupérer des données, selon certains critères de sélection ou de tri
- countBy? pour compter des données, selon certains critères de sélection
- deleteBy? pour supprimer des données, selon certains critères de sélection
- check? pour vérifier la validité de l'enregistrement
Méthodes spécifiques
Il est également possible de déclarer, voir de développer facilement d’autres méthodes, soit dans :
- le fichier de définition XML
- un fichier PHP de définition de classe
Un exemple complet
Le fichier de définition XML
Supposons que nous ayons une table d'actualités appelée news où chaque actualité puisse appartenir soit à aucun soit à un auteur :
La définition de méthodes supplémentaires en XML
Nous souhaiterions récupérer toutes les actualités d'un auteur ; donc une méthode findAllByAutor :
La définition de méthodes supplémentaires en php
Nous souhaiterions envoyer un mail à l'auteur lorsqu'on supprime une actualité lui appartenant et disposer d'un compteur d'actualité par auteur.
On crée un fichier news.dao.php dans le répertoire classes du module news :
<?php class DAONews { function delete ($id_news){ $news = $this->get($id_news); // Si l'auteur dispose d'une adresse de messagerie if ($news->autor_email != "") { $from = "contact@copix.org"; $fromName = "contact@copix.org"; $subject = "Suppression d'actualité" $message = "Une actualité a étée supprimée"; $eMail = new CopixHtmlEMail ($to, "", "", $subject, $message); $eMail->send ($from, $fromName); } // je supprime l'objet normalement $this->_compiled_delete($id_news); } function nbNews($id_author) { // On compte directement en SQL $arResults = _doQuery('select count(ID_NEWS) as count_news from news where id_autor=:id_author', array ('id_author'=>$id_author)); return $arResults[0]->count_news; } } ?>
Utilisation de la DAO
<?php // On boucle sur toutes les actualités foreach (_dao ('News')->findAll () as $news) { // On supprime toutes actualités qui n'ont pas d'auteur if (is_null($news->id_autor)) { _dao ('News')->delete ($news->id_news); } else { $nbNews = _dao ('News')->nbNews ($news->id_autors); echo ($news->autor_name." dispose de $nbNews actualités."); } } ?>
