Raccourcis : Contenu - rubriques - sous rubriques
EN FR

Vous avez vu comment décrire dans un fichier XML un DAO (voir fichier_de_base). Ce fichier, vous devez le stocker dans un répertoire daos/ d'un module et le nommer comme ceci : nom.dao.xml. nom est le nom de votre DAO.

Souvenez-vous qu'en fait, à partir d'un fichier DAO, vous définissez deux objets PHP :

  • un objet DAO qui est une factory, basé sur la classe jDaoFactoryBase : elle permet de récupérer, insérer, modifier, effacer un ou plusieurs enregistrements. Elle propose des méthodes de base, mais contient aussi les méthodes que vous avez définis dans le fichier XML dans la section <factory>.
  • un objet record DAO, basé sur la classe jDaoRecordBase, qui représente un enregistrement et dont vous avez décrit les propriétés dans la section <record>.

Récupérer la factory

Pour récupérer ces objets il faut passer par l'objet jDao qui propose diverses méthodes statiques :

  • get() : permet d'obtenir une factory. Renvoie toujours la même instance (utilise un singleton)
  • create() : permet d'obtenir une nouvelle instance d'une factory. Rarement utile.
  • createRecord() : permet d'obtenir un objet DAO record vide.
  • createConditions() : permet d'obtenir un objet jDAOConditions qui permet d'indiquer des conditions de sélection pour récupérer un ensemble d'objets record.
   

get(), create() et createRecord() prennent tous en argument un sélecteur de fichier DAO et un deuxième paramètre facultatif qui est le nom du profil jDb à utiliser (si paramètre absent, il prendra celui par défaut).

Si le profil jDb utilisé spécifie un préfixe de table, alors toutes les tables indiquées dans le DAO verront leur nom préfixé par la valeur de ce paramètre.

En admettant qu'il y ait un fichier DAO foo.dao.xml dans le module bar :


   $maDao = jDao::get("bar~foo");
   // ou si cette ligne de code est dans un fichier du module bar :
   $maDao = jDao::get("foo");
   
   $monRecord = jDao::createRecord("foo");

$maDao contient une factory de foo, et $monRecord un enregistrement vide de type foo.

Il est aussi possible d'appeler la méthode createRecord() (qui n'a pas de paramètres), sur la factory :


   $maDao = jDao::get("bar~foo");
   $monRecord = $maDao->createRecord();

Créer, modifier, effacer un enregistrement

Les méthodes insert(), update(), et delete() de la factory sont faites pour ça. Aux deux premières, vous indiquez un record. Pour delete(), vous indiquez les clés de l'enregistrement.

Création

Il faut récupérer un nouvel objet record, le remplir, et ensuite appeler la méthode insert()


   // instanciation de la factory
   $maFactory = jDao::get("foo");

   // creation d'un record correspondant au dao foo
   $record = jDao::createRecord("foo");

   // on remplit le record
   $record->champ1 = "hello";
   $record->champ2 = "...";

   // on le sauvegarde dans la base
   $maFactory->insert($record);   

S'il y a des champs de type autoincrement, les propriétés correspondantes dans $record seront mises à jour avec la nouvelle valeur.

Modification

Le processus est le suivant : on récupère un objet record, on modifie ses propriétés, et on appelle la méthode update().


   // instanciation de la factory
   $maFactory = jDao::get("foo");

   // récupération du record dont l'identifiant est 3
   $record = $maFactory->get(3);

   // on modifie le record
   $record->champ1 = "hello";
   $record->champ2 = "...";

   // on le sauvegarde dans la base
   $maFactory->update($record);   

Destruction

Il suffit d'appeler la méthode delete() en donnant l'id du record à détruire


   // instanciation de la factory
   $maFactory = jDao::get("foo");

   // destruction du record dont l'identifiant est 3
   $maFactory->delete(3);