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 :

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."); 
	} 
} 
?>