Comment accéder aux données ?

Pré-requis

  1. une base de données MySQL/MariaDB configurée.

Dans le cadre de ce tutoriel, nous allons utiliser la base de données déjà préparée pour les exemples qui vont suivre. Pour cela, il suffit juste d'importer le fichier SQL présent dans le dossier ./public/download/database/aftutorial.database.sql du projet aftutorial. Le code source de ce projet est disponible en téléchargement avec le framework.

Voici le schéma de la base de données aftutorial :

Schéma de la base de données aftutorial

Dans cet exemple, nous allons enregistrer en base de données les informations envoyées par les visiteurs depuis un formulaire de contact.
Le développement d'un formulaire sera expliqué dans un autre tutoriel. Ici, nous aborderons uniquement la création des composants d'accès aux données, qui sont appelés DAO.

Configuration de l'accès à la base de données MySQL/MariaDB

La base de données aftutorial est importée. Maintenant configurons son accès.

En suivant le tutoriel Configurer l'accès à MySQL/MariaDB, créer le fichier de configuration ./application/configuration/aftutorial.loc.datasource.cfg :

<?php 
//Data sources list
$_dataSources = [
	'aftutorialDs' => [
		'type' => 'mysqli',
		'serverName' => '127.0.0.1',
		'userName' => 'tutorialUser',
		'password' => 'tutorialUserPassword',
		'dataSourceName' => 'aftutorial',
		'port' => 3306
	]
];
?>

Génération des DAO

Pour générer les DAO associés à la base de données aftutorial, il suffit de lancer le web service suivant :

http://aftutorial.loc/core/generator/generate-dao,ws?dataSourceName=aftutorialDs

Cela va générer un DAO par table dans le dossier ./application/model/dao/aftutorialDs/ :

  1. CivilityDao.class.php ;
  2. EmailDao.class.php ;
  3. MessageDao.class.php ;
  4. UserDao.class.php ;
  5. UserMessageDao.class.php.

Ce web service accepte 2 paramètres :

  1. dataSourceName : nom de la source de données ;
  2. tableName (facultatif) : nom de la table du DAO à générer. L'ancien fichier DAO est archivé sous <TableName>Dao-<YmdHis>.class.php. Si ce paramètre est absent, alors tous les DAO seront générés par défaut.

Les méthodes de base d'un DAO

Pour accéder aux données d'une table, les méthodes les plus utilisées du DAO généré sont :

  1. insert : crée un enregistrement ;
  2. update : met à jour un enregistrement ;
  3. delete : supprime un enregistrement ;
  4. get : retourne un enregistrement ;
  5. exists : détermine l'existence d'un enregistrement ;
  6. getAll : retourne tous les enregistrements ;
  7. getPage : retourne une collection d'enregistrement par page ;
  8. getNewId : retourne un nouvel identifiant.

Il est possible d'implémenter de nouvelles méthodes :

  1. soit directement dans la classe du DAO générée ;
  2. soit par héritage, c'est-à-dire créer une classe DAO qui étendrait la classe du DAO générée.

Exemple d'utilisation d'un DAO

Le DAO ne peut être utilisé que dans un BO. Nous verrons dans le tutoriel suivant la création d'un BO (module métier), mais ici, voyons d'abord un exemple :

//Retrieve parameters from request
$parameters = &$this->_messages;

//Create a new message identifier
$messageId = $this->aftutorialDs->messageDao->getNewId();

//Set message data
$messageData = [
	'messageId' => $messageId,
	'subject' => $parameters['subject'],
	'message' => $parameters['message']
];

//Save message
$this->aftutorialDs->messageDao->insert($messageData);

Cet exemple parle de lui-même, c'est simple, car l'utilisation d'un DAO n'est pas plus compliquée que cela. Il montre la création d'un nouvel enregistrement dans la table message. En résumé, pour manipuler cette table :

  1. il faut d'abord accéder à la source de données aftutorielDs dans laquelle la table message existe :
    $this->aftutorialDs
  2. ensuite, depuis la source de données aftutorialDs, accédons à une instance DAO de la table message :
    $this->aftutorialDs->messageDao
  3. à partir de l'instance DAO messageDao, nous pouvons ainsi appeler ses méthodes. Par exemple :
    $this->aftutorialDs->messageDao->getNewId()
    et
    $this->aftutorialDs->messageDao->insert($messageData)

Voyons à présent comment nous pouvons implémenter cette action dans un BO...