File: examples/db/datamapper/example1.php

Recommend this page to a friend!
  Classes of Haseeb Ahmad Basil  >  PHP Skeleton Framework  >  examples/db/datamapper/example1.php  >  Download  
File: examples/db/datamapper/example1.php
Role: Example script
Content type: text/plain
Description: Example script
Class: PHP Skeleton Framework
Extensive Web application development framework
Author: By
Last change:
Date: 5 years ago
Size: 4,455 bytes
 

Contents

Class file image Download
<?php
include 'config.php';
include
'A/Db/Datamapper.php';
include
'A/Db/Datamapper/Xml.php';

class
Mock_Db {
    public
$_data = array();
    public
$error = 0;

    public function
__construct() {
// put some test data into the mapper for this example
       
$this->_data = array(
           
'Steve' => array(
               
'id' => 1,
               
'userid' => 'Steve',
               
'passwd' => 'lollypop',
               
'inactive' => 'N',
               
'dept_field' => 'North',
        ),
           
'Sally' => array(
               
'id' => 2,
               
'userid' => 'Sally',
               
'passwd' => 'sallybop',
               
'inactive' => 'N',
               
'dept_field' => 'East',
        ),
           
'Sam' => array(
               
'id' => 3,
               
'userid' => 'Sam',
               
'passwd' => 'sammydop',
               
'inactive' => 'Y',
               
'dept_field' => 'West',
        ),
            );

    }
   
    public function
query($sql) {
         switch (
substr($sql, 0, 6)) {
         case
'SELECT':
           
// get value from "WHERE key='value' at end of SQL
           
$a = split('WHERE', $sql);
           
$a = split('=', $a[1]);
           
$key = trim($a[1], " ='");
            if (isset(
$this->_data[$key])) {
               
$row = $this->_data[$key];
            } else {
               
$row = array();
               
$this->error = 1;
            }
           
$result = new Mock_Db_Result($row);
            break;

        case
'UPDATE':
echo
"UPDATE: $sql<br/>";
           
$result = null;
            break;
          
        case
'INSERT':
        case
'REPLACE':
echo
"INSERT/REPLACE: $sql<br/>";
           
$result = null;
            break;

        case
'DELETE':
echo
"DELETE: $sql<br/>";
           
$result = null;
            break;
        }

        return
$result;
    }
   
    public function
quoteValue($value) {
        return
"'$value'";
    }
   
    public function
escape($value) {
        return
addslashes($value);
    }
   
    public function
lastId() {
        return
1;
    }
   
    public function
isError() {
        return
$this->error;
    }
   
}

class
Mock_Db_Result {
    public
$_row = array(); // debug data for this example
   
public $error = 0;

    public function
__construct($row) {
// put some test data into the mapper for this example
       
if ($row) {
           
$this->_row = $row;
        } else {
           
$this->error = 1;
        }
    }
   
    public function
fetchRow() {
         return
$this->_row;
    }
   
    public function
isError() {
        return
$this->error;
    }
   
}

class
User_Mapper extends A_Db_Datamapper {

    public function
__construct($db) {
       
$this->setDb($db);
       
$this->setClass('User');
       
$this->setTable('users');
       
$this->addMapping(new A_Db_Datamapper_Mapping('username', 'userid', 'string', 20, true, '', array()));
       
$this->addMapping(new A_Db_Datamapper_Mapping('password', 'passwd', 'string', 24, false, '', array()));
       
$this->addMapping(new A_Db_Datamapper_Mapping('active', 'inactive', 'string', 1, false, '', array()));
       
// uncomment these two lines and comment previous line to show join generation
       
$this->addMapping(new A_Db_Datamapper_Mapping('dept', 'dept_field', 'string', 1, false, 'company', array()));
       
$this->addJoin(new A_Db_Datamapper_Join('users', 'userid', 'company', 'users_id', 'LEFT'));
    }
}

class
User {
    public
$username = '';
    public
$password = '';
    public
$active = false;
    public
$dept = '';
   
    public function
__construct($username='', $password='', $active='', $dept='') {
       
$this->username = $username;
       
$this->password = $password;
       
$this->active = $active;
       
$this->dept = $dept;
    }
}



// there are several ways to configure the mapper
#$Mapper = new A_Db_Datamapper(new Mock_Db(), 'User', 'users'); // need to add mappings like in User_Mapper
$Mapper = new A_Db_Datamapper_Xml(new Mock_Db(), 'mapping01.xml');
#$Mapper = new User_Mapper(new Mock_Db());
#$Mapper->allowKeyChanges(false); // allow the key to be changed in loaded properties

// load() fetches a database record by the key
$User1 = $Mapper->load('Steve');
$User2 = $Mapper->load('Sally');
$User3 = $Mapper->load('Sam');

// calling load90 with an already loaded key will return the object already in memory
$User4 = $Mapper->load('Steve');

// objects can then be used normally
$User1->username = 'adsf';
$User2->password = 'xxxxx';
$User2->active = 'Y';
$User3->active = 'N';
$User4->active = 'Y';

// new objects can be added that will be inserted later
$User5 = $Mapper->add(new User('Stephanie', 'kaboom', 'Y', 'South'), false);

unset(
$User3);
// commit will generate SQL and then all db object if present
$Mapper->commit();

// getSQL will return an array of SQL UPDATE/INSERT statements to write the changes back to the database
#dump($Mapper->getSQL());

dump($Mapper, 'Mapper');

For more information send a message to info at phpclasses dot org.