Exemples avec une table
Les exemples suivants utilisent tous le DAS Relationnel pour travailler avec un graphique de données contenant juste un objet de données d'application, une seule compagnie et les données qui seront dans la table compagnie. Ces exemples ne montre pas le pouvoir de SDO ou de DAS Relationnel et bien sûr les mêmes résultats peuvent être atteints plus économiquement à l'aide de requêtes SQL directes mais ces exemples sont pour vous montrer comment fonctionne le DAS Relationnel.
Pour ce simple scénario, il serait possible de simplifier les métadonnées de base de données pour inclure juste la table de compagnie - si cela était fait, le deuxième et troisième argument du constructeur et le spécificateur de colonne utilisé dans l'exemple de requête deviendrait optionnel.
Exemple #1 Création d'un objet de données
Le plus simple exemple est de créer un objet de données simple et de l'écrire à la base de données. Dans cet exemple, un objet simple de compagnie est créé, son nom est fixé à "Acme" et le DAS Relationnel est appelé pour écrire les changements à la base de données. Le nom de la compagnie est fixé ici en utilisant la méthode de propriété de nom. Voyez la section d'exemples sur l'extension SDO pour d'autres moyens d'accéder au propriétés d'un objet.
Les objets de données peuvent seulement être créés lorsque vous avez un objet de données au démarrage. C'est pour cette raison que le premier appel à DAS Relationnel ici est pour obtenir l'objet racine. C'est en effet comment demander pour un graphique de données vide - l'objet de racine spécial est la vrai racine de l'arbre. L'objet de données compagnie est alors créé avec l'appel à createDataObject() sur l'objet racine. Ceci crée l'objet de données compagnie et l'insère dans le graphique en insérant une propriété de valeurs multiples contenue dans l'objet racine appelé "compagnie".
Lorsque DAS Relationnel est appelé pour effectuer les changements, une simple requête d'insertion "INSERT INTO compagnie (nom} VALUES ("Acme");" sera construite et exécutée. La clé primaire générée automatiquement sera fixée dans l'objet de données et le changement sera effacé, alors il serait possible de continuer de travailler avec le même objet de données, le modifier, et applique les nouveaux changements une deuxième fois.
<?php
require_once 'SDO/DAS/Relational.php';
require_once 'company_metadata.inc.php';
/**************************************************************
* Construit le DAS avec les métadonnées
***************************************************************/
$das = new SDO_DAS_Relational ($database_metadata,'compagnie',$SDO_containment_metadata);
/**************************************************************
* Obtient l'objet racine et crée un objet compagnie dessous.
* Effectue un petit changement à l'objet de données.
***************************************************************/
$root = $das -> createRootDataObject();
$acme = $root -> createDataObject('compagnie');
$acme->name = "Acme";
/**************************************************************
* Récupère la connexion à la base de données et écrit l'objet à la base de données
***************************************************************/
$dbh = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);
$das -> applyChanges($dbh, $root);
?>
Exemple #2 Récupération d'un objet de données
Dans cet exemple, un simple objet de données est récupéré de la base de données - ou possiblement plus d'un s'il y avait plus d'une compagnie qui était appelée "Acme". Pour chaque compagnie retournée, les propriétés nom et id sont affichées.
Dans cet exemple, le troisième argument de executeQuery(), le spécificateur de colonne est requis puisqu'il y a d'autres tables dans les métadonnées avec le nom de colonne nom et id. S'il n'y avait pas d'ambiguïté possible, il aurait pu être omis.
<?php
require_once 'SDO/DAS/Relational.php';
require_once 'company_metadata.inc.php';
/**************************************************************
* Construit le DAS avec les métadonnées
***************************************************************/
$das = new SDO_DAS_Relational ($database_metadata,'compagnie',$SDO_containment_metadata);
/**************************************************************
* Récupère la connexion à la base de données
***************************************************************/
$dbh = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);
/**************************************************************
* Effectue une requête pour obtenir un objet compagnie - possiblement
* plusieurs s'ils existent
***************************************************************/
$root = $das->executeQuery($dbh,
'select nom, id from compagnie where nom="Acme"',
array('compagnie.nom', 'compagnie.id') );
/**************************************************************
* Affiche le nom et le id
***************************************************************/
foreach ($root['compagnie'] as $compagnie) {
echo "La compagnie obtenue de la base de données a le nom = " .
$compagnie['nom'] . " et un id " . $compagnie['id'] . "\n";
}
?>
Exemple #3 Mise à jour d'objet de données
Cet exemple combine les deux précédent, dans le sens que pour être mis à jour, l'objet doit être premièrement récupéré. L'application renverse le nom de compagnie (alors "Acme" devient "emcA") et alors les changements sont écrits à la base de données de la même manière qu'ils étaient lorsque l'objet avait été créé. Puisque la requête cherche pour le nom, on peut chercher des deux manières le nom à plusieurs reprises pour trouver la compagnie et renverser son nom chaque fois.
Dans cet exemple, la même instance de DAS Relationnel est réutilisée pour applyChanges(), avec le descripteur de base de données PDO. Ceci est tout à fait correcte; il est aussi possible d'autoriser les instances précédentes d'être ramassées par le ramasse-miettes et d'obtenir de nouvelles instances. Aucune données d'état concernant le graphique n'est tenue par le DAS Relationnel une fois qu'il a retourné un graphique de données à l'application. Toutes les données nécessaires sont soit dans le graphique ou peuvent être reconstruites à partir des métadonnées.
<?php
require_once 'SDO/DAS/Relational.php';
require_once 'company_metadata.inc.php';
/**************************************************************
* Construit le DAS avec les métadonnées
***************************************************************/
$das = new SDO_DAS_Relational ($database_metadata,'compagnie',$SDO_containment_metadata);
/**************************************************************
* Récupère la connexion à la base de données
***************************************************************/
$dbh = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);
/**************************************************************
* Effectue une requête pour obtenir un objet compagnie - possiblement
* plusieurs s'ils existent
***************************************************************/
$root = $das->executeQuery($dbh,
'select nom, id from compagnie where nom="Acme" or nom="emcA"',
array('compagnie.nom', 'compagnie.id') );
/**************************************************************
* Modifie le nom de la première compagnie seulement
***************************************************************/
$compagnie = $root['compagnie'][0];
echo "Compagnie obtenue avec le nom " . $compagnie->nom . "\n";
$compagnie->nom = strrev($compagnie->nom);
/**************************************************************
* Écriture du changement
***************************************************************/
$das->applyChanges($dbh,$root);
?>
Exemple #4 Suppression d'un objet de données
Toutes compagnies appelées "Acme" ou son inverse "emcA" sont récupérées. Elles sont ensuite toutes supprimées du graphique avec unset.
Dans l'exemple, elles sont toutes supprimées en un seul coup en supprimant la propriété contenue (la propriété définissant la relation contenue). Il est aussi possible de les supprimer individuellement.
<?php
require_once 'SDO/DAS/Relational.php';
require_once 'company_metadata.inc.php';
/**************************************************************
* Construit le DAS avec les métadonnées
***************************************************************/
$das = new SDO_DAS_Relational ($database_metadata,'compagnie',$SDO_containment_metadata);
/**************************************************************
* Récupère la connexion à la base de données
***************************************************************/
$dbh = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);
/**************************************************************
* Effectue une requête pour obtenir un objet compagnie - possiblement
* plusieurs s'ils existent
***************************************************************/
$root = $das->executeQuery($dbh,
'select nom, id from compagnie where nom="Acme" or nom="emcA"',
array('company.name', 'company.id') );
/**************************************************************
* Supprime les compagnies trouvées du graphique de données
***************************************************************/
unset($root['compagnie']);
/**************************************************************
* Écrit le(s) changement(s)
***************************************************************/
$das->applyChanges($dbh,$root);
?>
Version en cache
25/11/2024 06:04:39 Cette version de la page est en cache (à la date du 25/11/2024 06:04:39) afin d'accélérer le traitement. Vous pouvez activer le mode utilisateur dans le menu en haut pour afficher la dernère version de la page.Document créé le 30/01/2003, dernière modification le 26/10/2018
Source du document imprimé : https://www.gaudry.be/php-rf-sdodasrel.examples.one-table.html
L'infobrol est un site personnel dont le contenu n'engage que moi. Le texte est mis à disposition sous licence CreativeCommons(BY-NC-SA). Plus d'info sur les conditions d'utilisation et sur l'auteur.
Références
Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.