PHP Classes

File: vendor/jackbooted/db/ORM.php

Recommend this page to a friend!
  Classes of Brett Dutton   JackBooted PHP Framework   vendor/jackbooted/db/ORM.php   Download  
File: vendor/jackbooted/db/ORM.php
Role: Class source
Content type: text/plain
Description: Class source
Class: JackBooted PHP Framework
Web application framework using simplified MVC
Author: By
Last change:
Date: 8 years ago
Size: 3,270 bytes
 

Contents

Class file image Download
<?php
namespace Jackbooted\DB;

use \
Jackbooted\Util\Log4PHP;
/**
 * @copyright Confidential and copyright (c) 2016 Jackbooted Software. All rights reserved.
 *
 * Written by Brett Dutton of Jackbooted Software
 * brett at brettdutton dot com
 *
 * This software is written and distributed under the GNU General Public
 * License which means that its source code is freely-distributed and
 * available to the general public.
 */

/**
 */
abstract class ORM extends \Jackbooted\Util\JB {
    const
UPDATE = 'update';
    const
INSERT = 'insert';

    private static
$log;

    public static function
init () {
       
self::$log = Log4PHP::logFactory ( __CLASS__ );
    }

    public static function
create ( $data ) {
        if (
function_exists ( 'get_called_class' ) ) {
           
$clazz = get_called_class ();
        }
        else {
           
$bt = debug_backtrace ();
           
$clazz = $bt[1]['class'];
        }

       
$obj = new $clazz ( $data );
       
$obj->save();
        return
$obj;
    }

    public static function
factory ( $data ) {
        if (
function_exists ( 'get_called_class' ) ) {
           
$clazz = get_called_class ();
        }
        else {
           
$bt = debug_backtrace ();
           
$clazz = $bt[1]['class'];
        }

        return new
$clazz ( $data );
    }

    protected static function
tableToObjectList ( $table ) {
        if (
function_exists ( 'get_called_class' ) ) {
           
$clazz = get_called_class ();
        }
        else {
           
$bt = debug_backtrace ();
           
$clazz = $bt[1]['class'];
        }

       
$objList = [];
        foreach (
$table as $row ) {
           
$ormObject = new $clazz ( $row );
           
$objList[$ormObject->id] = $ormObject;
        }
        return
$objList;
    }

    protected
$data;
    private
$dao;

    public function
__construct ( DAO $dao, $data ) {
       
parent::__construct();
       
$this->dao = $dao;
       
$this->data = $this->dao->objToRel ( $data );
    }

    public function
__get ( $key ) {
        if ( isset (
$this->dao->orm[$key] ) ) {
           
$key = $this->dao->orm[$key];
        }
        return
$this->data[$key];
    }

    public function
__set ( $key, $value ) {
        if ( isset (
$this->dao->orm[$key] ) ) {
           
$key = $this->dao->orm[$key];
        }
       
$this->data[$key] = $value;
    }

    public function
getData ( ) {
        return
$this->data;
    }

    public function
save () {
        if ( isset (
$this->data[$this->dao->primaryKey] ) ) {
           
$where = [ $this->dao->primaryKey => $this->data[$this->dao->primaryKey] ];
           
$data = array_merge ( $this->data );
            unset (
$data[$this->dao->primaryKey] );
           
$this->dao->update ( $data, $where );
            return
self::UPDATE;
        }
        else {
           
$this->data[$this->dao->primaryKey] = $this->dao->insert ( $this->data );
            return
self::INSERT;
        }
    }
    public function
delete () {
        if ( isset (
$this->data[$this->dao->primaryKey] ) ) {
            return
$this->dao->delete ( [ $this->dao->primaryKey => $this->data[$this->dao->primaryKey] ] );
        }
        else {
            return
$this->dao->delete ( $this->data );
        }
    }
}