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);
?>