sdodasrel-php-examples-php-one-table-9

  • Examples
  • One-table examples

  • One-table examples
  • One-table examples

    One-table examples

    The following set of examples all use the
    Relational DAS to work with a data graph containing just one
    application data object, a single company and the data just to be
    found the company table. These examples do not exercise the power
    of SDO or the Relational DAS and of course the same result could be
    achieved more economically with direct SQL statements but they are
    intended to illustrate how to work with the Relational DAS.

    For this very simple scenario it would be possible
    to simplify the database metadata to include just the company table
    – if that were done the second and third arguments to the
    constructor and the column specifier used in the query example
    would become optional.

    Example #1 Creating a data object

    The simplest example is that of creating a single data object
    and writing it to the database. In this example a single company
    object is created, its name is set to ‘Acme’, and the Relational
    DAS is called to write the changes to the database. The company
    name is set here using the property name method. See the Examples section on the SDO
    extension for other ways of accessing the properties of an
    object.

    Data objects can only be created when you have a data object to
    start with, however. It is for that reason that the first call to
    the Relational DAS here is to obtain a root object. This is in
    effect how to ask for an empty data graph – the special root object
    is the true root of the tree. The company data object is then
    created with a call to createDataObject() on the root
    object. This creates the company data object and inserts it in the
    graph by inserting into a multi-valued containment property on the
    root object called ‘company’.

    When the Relational DAS is called to apply the changes a simple
    insert statement ‘INSERT INTO company (name) VALUES (“Acme”);’ will
    be constructed and executed. The auto-generated primary key will be
    set into the data object and the change summary will be reset, so
    that it would be possible to continue working with the same data
    object, modify it, and apply the newer changes a second time.

    <?php
    require_once 'SDO/DAS/Relational.php';
    require_once 
    'company_metadata.inc.php';

    /**************************************************************
    * Construct the DAS with the metadata
    ***************************************************************/
    $das = new SDO_DAS_Relational ($database_metadata,'company',$SDO_containment_metadata);

    /**************************************************************
    * Obtain a root object and create a company object underneath.
    * Make a simple change to the data object. 
    ***************************************************************/
    $root $das  -> createRootDataObject();
    $acme $root -> createDataObject('company');

    $acme->name "Acme";

    /**************************************************************
    * Get a database connection and write the object to the database
    ***************************************************************/
    $dbh = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);
    $das -> applyChanges($dbh$root);
    ?>

    Example #2 Retrieving a data object

    In this example a single data object is retrieved from the
    database – or possibly more than one if there is more than one
    company called ‘Acme’. For each company returned, the name and id properties are
    echoed.

    In this example the third argument to executeQuery(), the column
    specifier is needed as there are other tables in the metadata with
    column names of name and id. If there were no possible ambiguity it
    could be omitted.

    <?php
    require_once 'SDO/DAS/Relational.php';
    require_once 
    'company_metadata.inc.php';

    /**************************************************************
    * Construct the DAS with the metadata
    ***************************************************************/
    $das = new SDO_DAS_Relational ($database_metadata,'company',$SDO_containment_metadata);

    /**************************************************************
    * Get a database connection
    ***************************************************************/
    $dbh = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);

    /**************************************************************
    * Issue a query to obtain a company object - possibly more if they exist
    ***************************************************************/
    $root $das->executeQuery($dbh,
             
    'select name, id from company where name="Acme"',
              array(
    'company.name''company.id') );

    /**************************************************************
    * Echo name and id 
    ***************************************************************/
    foreach ($root['company'] as $company) {
      echo 
    "Company obtained from the database has name = " 
      
    $company['name'] . " and id " $company['id'] . "\n";
    }
    ?>

    Example #3 Updating a data object

    This example combines the previous two, in the sense that in
    order to be updated the object must first be retrieved. The
    application code reverses the company name (so ‘Acme’ becomes
    ’emcA’) and then the changes are written back to the database in
    the same way that they were when the object was created. Because
    the query searches for the name both ways round the program can be
    run repeatedly to find the company and reverse its name each
    time.

    In this example the same instance of the Relational DAS is
    reused for the applyChanges(), as is the PDO
    database handle. This is quite alright; it also alright to allow
    the previous instances to be garbage collected and to obtain new
    instances. No state data regarding the graph is held the Relational
    DAS once it has returned a data graph to the application. All
    necessary data is either within the graph itself, or can be
    reconstructed from the metadata.

    <?php
    require_once 'SDO/DAS/Relational.php';
    require_once 
    'company_metadata.inc.php';

    /**************************************************************
    * Construct the DAS with the metadata
    ***************************************************************/
    $das = new SDO_DAS_Relational ($database_metadata,'company',$SDO_containment_metadata);

    /**************************************************************
    * Get a database connection
    ***************************************************************/
    $dbh = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);

    /**************************************************************
    * Issue a query to obtain a company object - possibly more if they exist
    ***************************************************************/
    $root $das->executeQuery($dbh,
      
    'select name, id from company where name="Acme" or name="emcA"',
      array(
    'company.name''company.id') );

    /**************************************************************
    * Alter the name of just the first company
    ***************************************************************/
    $company $root['company'][0];
    echo 
    "obtained a company with name of " $company->name "\n";
    $company->name strrev($company->name);

    /**************************************************************
    * Write the change back
    ***************************************************************/
    $das->applyChanges($dbh,$root);
    ?>

    Example #4 Deleting a data object

    Any companies called ‘Acme’ or its reverse ’emcA’ are retrieved.
    They are then all deleted from the graph with unset.

    In this example they are all deleted in one go by unsetting the
    containing property (the property defining the containment
    relationship). It is also possible to delete them individually.

    <?php
    require_once 'SDO/DAS/Relational.php';
    require_once 
    'company_metadata.inc.php';

    /**************************************************************
    * Construct the DAS with the metadata
    ***************************************************************/
    $das = new SDO_DAS_Relational ($database_metadata,'company',$SDO_containment_metadata);

    /**************************************************************
    * Get a database connection
    ***************************************************************/
    $dbh = new PDO(PDO_DSN,DATABASE_USER,DATABASE_PASSWORD);

    /**************************************************************
    * Issue a query to obtain a company object - possibly more if they exist
    ***************************************************************/
    $root $das->executeQuery($dbh,
      
    'select name, id from company where name="Acme" or name="emcA"',
      array(
    'company.name''company.id') );

    /**************************************************************
    * Delete any companies found from the data graph
    ***************************************************************/
    unset($root['company']);

    /**************************************************************
    * Write the change(s) back
    ***************************************************************/
    $das->applyChanges($dbh,$root);
    ?>