> CopixCSV > Anti_Spam > CopixForms > PDFGenerator > Normes_de_developpement > copix_team > ActionGroup > CopixDAO
fr

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 :

Méthodes standard

Les DAO disposent, en standard des méthodes suivantes :

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 :


<?xml version="1.0" encoding="UTF-8" ?>
<daodefinition>
   <datasource>
      <tables>
         <table name="news" primary="yes" />
         <table name="authors" join="left" />
      </tables>
   </datasource>

 <properties>
  <property name="id_news"
         captioni18n="dao.news.fields.id_news"
         pk="true"
         required="yes"
         type="autoincrement"
         sequence="SEQ_news"
         />
  <property name="title_news"
         captioni18n="dao.news.fields.title_news"
         type="string"
         maxlength="50"
         required="yes"
         />

  <property name="summary_news"
         captioni18n="dao.news.fields.summary_news"
         type="string"
         maxlength="255"
         required="yes"
         />

  <property name="content_news"
         captioni18n="dao.news.fields.content_news"
         type="string"
         required="yes"
         />

  <property name="datewished_news"
         captioni18n="dao.news.fields.datewished_news"
         type="int"
         required="yes"
         />

  <property name="status_news"
         captioni18n="dao.news.fields.status_news"
         type="int"
         required="no"
         />

  <property name="id_autor"
         captioni18n="dao.news.fields.id_autor"
         type="int"
         fkTable="authors"
         fkFieldName="id_autor"
         />
   <property name="author_name"
         captioni18n="authors|dao.autors.autor_name"
         type="string"
         />
   <property name="author_email"
         captioni18n="authors|dao.autors.autor_email"
         type="string"
         maxlength="255"
         />
 </properties>
</daodefinition>

 

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 :


<?xml version="1.0" encoding="UTF-8" ?>
<daodefinition>
   <datasource>
        ....
   </datasource>

 <properties>
    ....
 </properties>

 <methods>

   <method name="findAllByAutor" type="select">

         <parameters>
            <parameter name="id_author" />
         </parameters>

         <conditions>
            <condition property="id_author" operator="=" value="$id_author" />
         </conditions>

         <order>
            <orderitem property="title_news" way="asc" />
         </order>

    </method>
 </methods>

</daodefinition>

 

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 {

  public 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é supprimée';

         $eMail = new CopixHtmlEMail ($to, '', '', $subject, $message);
         $eMail->send ($from, $fromName);

     }

     // je supprime l'objet normalement
     $this->_compiled_delete (id_news);
   }

   public function nbNews ($id_autor) {
      // La requête sur la base
      $query = 'SELECT COUNT (ID_NEWS) count_news FROM news WHERE id_autor = ' . intval ($id_autor);

      // On récupère Les résultats
      $arResults = CopixDB::getConnection ()->doQuery ($query);


      // On récupère la valeur à retourner
      $toReturn = $arResults[0]->count_news;

      return $toReturn;
   }
}
?>
 

Utilisation de la DAO


   // On récupère toutes les actualités
   $arr_news = _dao ('News')->findAll ();

   // On boucle sur toutes les actualités
   foreach ($arr_news 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.");
     }
   }