El conjunto siguiente de ejemplos usa el DAS Relacional para trabajar con un grafo de datos que contiene sólo un objeto de datos de aplicación, una sóla compañía y los datos que se encuentran en la tabla compañía. Estos ejemplos no ejercitan el poder de SDO o del DAS Relacional y, por supuesto, se podría lograr el mismo resultado de forma más económica con sentencias SQL directas, pero su intención es ilustrar cómo funcionan con el DAS Relacional.
Para este sencillísimo escenario sería posible simplificar los metadatos de la base de datos para incluir sólo la tabla compañía - si se hiciera, el segundo y tercer argumento del constructor y el especificador de columna usado en el ejemplo de consulta serían opcionales.
Ejemplo #1 Crear un objeto de datos
El ejemplo más simple es crear un único objeto de datos y escribirlo en la base de datos. En este ejemplo se crea un único objeto compañía, su nombre se establece a 'Acme', y se llama al DAS Relacional para escribir los cambios en la base de datos. El nombre de la compañía se establece aquí usando el método de nombre de propiedad. Véase la sección Ejemplos en la extensión SDO para otras maneras de acceder a las propiedades de un objeto.
Sin embargo, los objetos de datos solo se pueden crear cuando se tiene un objeto de datos con el que empezar. Es por esta razón que la primera llamada al DAS Relacional aquí sea para obtener un objeto raíz. Este es, en efecto, cómo preguntar por un grafo de datos vacío - El objeto raíz especial es la raíz verdadera del árbol. El objeto de datos compañía es entonces creado con una llamada a createDataObject() sobre el objeto raíz. Esto crea el objeto de datos compañía y lo inserta en el grafo insertando en una propiedad de contención polievaluada en el objeto raíz llamado 'compañía'.
Cuando se llama al DAS Relacional para aplicar los cambios se construirá y ejecutará una única sentencia de inserción insert statement 'INSERT INTO compañía (name) VALUES ("Acme");', La clave primaria autogenerada se establecerá en el objeto de datos y el resumen de cambios será reiniciado, por lo que sería posible continuar trabajando con el mismo objeto de datos, modificarlo, y aplicar los nuevos cambios una segunda vez.
<?php
require_once 'SDO/DAS/Relational.php';
require_once 'company_metadata.inc.php';
/**************************************************************
* Construir el DAS con los metadatos
***************************************************************/
$das = new SDO_DAS_Relational ($metadatos_bd,'compañía',$metadatos_contenedor_SDO);
/**************************************************************
* Obtener un objeto raíz y crear un objeto compañía bajo él.
* Realizar un único cambio al objeto de datos.
***************************************************************/
$raíz = $das -> createRootDataObject();
$acme = $raíz -> createDataObject('compañía');
$acme->name = "Acme";
/**************************************************************
* Obtener una conexión a la base de datos y escribir el objeto en ella
***************************************************************/
$gbd = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);
$das -> applyChanges($gbd, $raíz);
?>
Ejemplo #2 Recuperar un objeto de datos
En este ejemplo se recupera un único objeto de datos de la base de datos - o posiblemente más de uno si existe más de una compañía llamada 'Acme'. Se utiliza echo con las propiedades nombre e id por cada compañía devuelta.
En este ejemplo, el tercer argumento de executeQuery(), el especificador de columna es necesario ya que existen otras tablas en los metadatos con nombre de columnas nombre e id. Si no hubiera posibilidad de ambigüedad se podría omitir.
<?php
require_once 'SDO/DAS/Relational.php';
require_once 'company_metadata.inc.php';
/**************************************************************
* Construir el DAS con los metadatos
***************************************************************/
$das = new SDO_DAS_Relational ($metadatos_bd,'company',$metadatos_contenedor_SDO);
/**************************************************************
* Obtener una conexión a la base de datos
***************************************************************/
$gbd = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);
/**************************************************************
* Emitir una consulta para obtener un objeto compañía - posiblemente más si existen
***************************************************************/
$raíz = $das->executeQuery($gbd,
'select nombre, id from compañía where nombre="Acme"',
array('compañía.name', 'compañía.id') );
/**************************************************************
* Usar echo con el nombre y el id
***************************************************************/
foreach ($raíz['compañía'] as $compañía) {
echo "La compañía obtenida de la base de datos tiene como nombre = " .
$compañía['nombre'] . " e id " . $compañía['id'] . "\n";
}
?>
Ejemplo #3 Actualizar un objeto de datos
Este ejemplo combina los dos anteriores, en el sentido de que para que sea actualizado, el objeto debe primero ser recuperado. El código de la aplicación invierte el nombre de la compañía (así, 'Acme' se convierte en 'emcA') y luego se escriben los cambios en la base de datos de la misma forma que estuvieran cuando el objeto fue creado. Ya que la consulta busca el nombre de ambas maneras, el programa puede ejecutarse repetidamente para encontrar la compañía e invertir su nombre cada vez.
En este ejemplo se reutiliza la misma instancia del DAS Relacional para el método applyChanges(), ya que es el gestor de la base de datos de PDO. Esto es completamente correcto; también es correcto permitir a las instancias anteriores que sean puestas en el recolector de basura y obtener nuevas instancias. El DAS Relacional no contiene datos de estado en lo que se refiere al grafo una vez que ha sido devuelto un grafo de datos a la aplicación. Todos los datos necesarios están dentro del grafo en sí, o se pueden reconstruir desde los metadatos.
<?php
require_once 'SDO/DAS/Relational.php';
require_once 'company_metadata.inc.php';
/**************************************************************
* Construir el DAS con los metadatos
***************************************************************/
$das = new SDO_DAS_Relational ($metadatos_bd,'compañía',$metadatos_contenedor_SDO);
/**************************************************************
* Obtener una conexión a la base de datos
***************************************************************/
$gbd = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);
/**************************************************************
* Emitir una consulta para obtener un objeto compañía - posiblemente más si existen
***************************************************************/
$raíz = $das->executeQuery($gbd,
'select nombre, id from compañía where nombre="Acme" or nombre="emcA"',
array('compañía.nombre', 'compañía.id') );
/**************************************************************
* Cambiar el nombre de la primera compañía unicamente
***************************************************************/
$compañía = $raíz['compañía'][0];
echo "obtenida una compañía con el nombre " . $compañía->nombre . "\n";
$compañía->nombre = strrev($compañía->nombre);
/**************************************************************
* Escribir los cambios
***************************************************************/
$das->applyChanges($dbh,$raíz);
?>
Ejemplo #4 Borrar un objeto de datos
Se recuperan cualesquiera compañías llamadas 'Acme' o su inverso 'emcA'. Entonces son borradas del grafo con unset.
En este ejemplo todas son borradas de una sola vez desestableciendo la propiedad de contención (la propiedad que define la relación de contención). También es posible borrarlas individualmente.
<?php
require_once 'SDO/DAS/Relational.php';
require_once 'company_metadata.inc.php';
/**************************************************************
* Construir el DAS con los metadatos
***************************************************************/
$das = new SDO_DAS_Relational ($metadatos_bd,'compañía',$metadatos_contenedor_SDO);
/**************************************************************
* Obtener una conexión a la base de datos
***************************************************************/
$gbd = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);
/**************************************************************
* Emitir una consulta para obtener un objeto compañía - posiblemente más si existen
***************************************************************/
$raíz = $das->executeQuery($gbd,
'select nombre, id from compañía where nombre="Acme" or nombre="emcA"',
array('compañía.nombre', 'compañía.id') );
/**************************************************************
* Borrar cualquier compañía encontrada del grafo de datos
***************************************************************/
unset($raíz['compañía']);
/**************************************************************
* Escribir el/los /cambio/s
***************************************************************/
$das->applyChanges($gbd,$raíz);
?>