Introducción

Advertencia

Esta extensión es EXPERIMENTAL. Esto significa que el comportamiento de esta extensión, los nombres de sus funciones y todo lo documentado sobre esta extensión, puede cambiar en una futura edición de PHP sin previo aviso. El uso de esta extensión queda bajo su propia responsabilidad.

Para poder usar el Servicio de Acceso a Datos Relacional con Objetos de Datos de Servicio (SDOs), se necesitan comprender algunos de los conceptos que están bajo un SDO: el grafo de datos, el objeto de datos, la manera desconectada de trabajar, el resumen de cambios, XPath y expresiones de propiedad, etc. Si estas ideas no le son familiares, debería mirar primero en la sección sobre SDO. Además, el DAS Relacional hace uso de la extensión PDO para aislarse a sí misma de especificaciones de diferentes bases de datos relacionales subyacentes. Para poder usar el DAS Relacional se necesita poder crear y pasar una conexión a base de datos PDO; por esta razión se debería echar un vistazo a la sección sobre PDO.

La tarea del DAS Relacional es mover datos entre la aplicación y una base de datos relacional. Para poder hacer esto necesita ser informado de la referenciación entre las entidades de la base de datos - tabla, columnas, claves primarias y foráneas - y los elementos del modelo del SDO - tipes, propiedades, relaciones de contención, etc. Se especifica esta información como metadatos al contruir el DAS Relacional.

Información general sobre la operación
  1. El primer paso es llamar al constructor del DAS Relacional, pasando los metadatos que definen la referenciación entre la base de datos y el modelo del SDO. Hay ejemplo de esto más adelante.

  2. El siguiente paso podría ser llamar al método executeQuery() o executePreparedQuery() sobre el DAS Relacional, pasando una sentencia SQL literal al DAS para preparar y ejecutar, o una sentencia preparada con parámetros de sustitución y una lista de valores a insertar. También es necesario especificar una pequeña cantidad de metadatos sobre el consulta en sí, por lo que el DAS Relacional pueda conocer exactamente qué columnas serán devueltas desde la base de datos y en qué orden. También se necesitará pasar una conxión a base de datos de PDO.

    El valor devuelto por executeQuery() o executePreparedQuery() es un grafo de datos normalizado que contiene todos los datos del conjunto de resultados. Para una consulta que devuelva datos obtenidos de varias tablas, este grafo contendrá varios objetos de datos, enlazados por relaciones de contención de SDO. También pueden haber referencias de no contención de SDO con los datos.

    Una vez que la consulta ha sido ejecutada y el grafo de datos construido, ya no hay necesidad de la insntacia del DAS Relacional o de la conexión a la base de datos. the database connection. No existen bloqueos sobre la base de datos. El DAS Relacional y la conexión a base de datos de PDO pueden ponerse en el recolector de basura.

  3. Posiblemente los datos del grafo de datos experimentarán varias modificaciones. El grafo de datos puede ser serializado dentro de la sesión de PHP y por lo tanto puede tener un tiempo de vida superior a una interacción cliente-servidor. Los objetos de datos se puede crear y añadir al grafo, los objetos de datos ya existentes en el grafo se pueden borrar, y los objetos de datos del grafo pueden ser modificados.

  4. Finalmente, los cambios hechos al grafo de datos pueden volver a ser aplicados a la base de datos usando el método applyChanges() del DAS Relacional. Para esto, se debe construir otra instancia del DAS Relacional, usando la misma metainformación, y se debe obtener otra conexión a la base de datos. La conexión y el grafo de datos son pasados a applyChanges(). En este punto el DAS Relacional examina el registro de cambios y genera las sentencias SQL INSERT, UPDATE y DELETE necesarias para aplicar los cambios. Cualquier sentencia UPDATE y DELETE está cualificada con los valores originales de los datos, por lo que deberían ser detectados los datos cambiados en la base de datos por el momento. Asumiendo que no ocurren tales colisiones, los cambios serán consignados a la base de datos. La aplicación puede entonces continuar para trabajar con el grafo de datos, hacer más cambios y aplicarlos, o puede descartarlos.

Existen otras maneras de trabajar con los datos de una base de datos: es posible crear objetos de datos y escribirlos en la base de datos sin una llamada preliminar a executeQuery(), por ejemplo. Este escenario y otros son explorados en la sección Ejemplos de abajo.