<?php 
/** 
 * * 
 *  * please don't remove this comment block 
 *  * 
 *  * @author phptricks Team - Mohammad Anzawi 
 *  * @author_uri https://phptricks.org 
 *  * @uri https://github.com/anzawi/php-database-class 
 *  * @version 5.0.0 
 *  * @licence MIT -> https://opensource.org/licenses/MIT 
 *  * @package PHPtricks\Orm 
 * 
 */ 
 
namespace PHPtricks\Orm; 
 
use ArrayAccess; 
use ArrayObject; 
use IteratorAggregate; 
use PHPtricks\Orm\Collection\Collection; 
use PHPtricks\Orm\Providers\Provider; 
 
use function config; 
 
/** 
 * Class Database 
 * 
 * @package PHPtricks\Orm 
 */ 
class Database implements IteratorAggregate, ArrayAccess 
{ 
 
    use Variables; 
    use Provider; 
 
 
    /** 
     * Database constructor. 
     * 
     * @param  array  $data  query results if exists 
     * @param  array  $info  store current table name and id columns name 
     * 
     * DON'T pass parameters to __construct. 
     */ 
    public function __construct() 
    { 
        // class correct method as database driver selected in config file 
        call_user_func_array([$this, config()], [null]); 
    } 
 
    // foreach results 
 
    /** 
     * DB::connect() 
     * return instance 
     * 
     * @return object 
     */ 
    public static function connect() 
    { 
        // do deny duplicate connection 
        // check if $_instance is null or not 
        // if null so connect database 
        // otherwise return current connection object 
        if ( ! isset(self::$_instance) || self::$_instance == null) { 
            self::$_instance = new Database(); 
        } 
 
        return self::$_instance; 
    } 
 
    public function getIterator() 
    { 
        $o = new ArrayObject($this->_results); 
 
        return $o->getIterator(); 
    } 
 
    /** 
     * @param $offset 
     * 
     * @return $this 
     */ 
    public function offset($offset) 
    { 
        $this->_query .= " OFFSET ".$offset; 
 
        return $this; 
    } 
 
    /** 
     * DB::error() 
     * return _error variable 
     * 
     * @return bool 
     */ 
    public function error() 
    { 
        return $this->_error; 
    } 
 
    /** 
     * set _table var value 
     * 
     * @param  string  $table  the table name 
     * 
     * @return object - DBContent 
     */ 
    public function table($table = '') 
    { 
        if ( ! $table) { 
            return $this->_table; 
        } 
 
        $this->_table = $table; 
 
        return $this; 
    } 
 
 
    /** 
     * Whether a offset exists 
     * 
     * @link http://php.net/manual/en/arrayaccess.offsetexists.php 
     * 
     * @param  mixed  $offset  <p> 
     * An offset to check for. 
     * </p> 
     * 
     * @return boolean true on success or false on failure. 
     * </p> 
     * <p> 
     * The return value will be casted to boolean if non-boolean was returned. 
     * @since 5.0.0 
     */ 
    public function offsetExists($offset) 
    { 
        return isset($this->_results[$offset]); 
    } 
 
    /** 
     * Offset to retrieve 
     * 
     * @link http://php.net/manual/en/arrayaccess.offsetget.php 
     * 
     * @param  mixed  $offset  <p> 
     * The offset to retrieve. 
     * </p> 
     * 
     * @return mixed Can return all value types. 
     * @since 5.0.0 
     */ 
    public function offsetGet($offset) 
    { 
        return $this->_results[$offset]; 
    } 
 
 
    /** 
     * Join's 
     */ 
    /** 
     * make join between tables 
     * 
     * @param  string  $table 
     * @param  array  $condition 
     * @param  string  $join 
     * 
     * @return $this 
     */ 
 
    /** 
     * Offset to set 
     * 
     * @link http://php.net/manual/en/arrayaccess.offsetset.php 
     * 
     * @param  mixed  $offset  <p> 
     * The offset to assign the value to. 
     * </p> 
     * @param  mixed  $value  <p> 
     * The value to set. 
     * </p> 
     * 
     * @return void 
     * @since 5.0.0 
     */ 
    public function offsetSet($offset, $value) 
    { 
        if (isset($this->_results[$offset])) { 
            if ( ! is_null($this->_newValues)) { 
                $this->_newValues[$offset] = $value; 
            } else { 
                $this->_newValues          = []; 
                $this->_newValues[$offset] = $value; 
            } 
        } 
    } 
 
    /** 
     * Offset to unset 
     * 
     * @link http://php.net/manual/en/arrayaccess.offsetunset.php 
     * 
     * @param  mixed  $offset  <p> 
     * The offset to unset. 
     * </p> 
     * 
     * @return void 
     * @since 5.0.0 
     */ 
    public function offsetUnset($offset) 
    { 
        return null; 
    } 
 
    protected function collection($collection) 
    { 
        return new Collection($collection, self::$_instance); 
    } 
 
    protected function getCollection($table) 
    { 
        if (isset($this->__cach[md5($table)])) { 
            return true; 
        } 
 
        return false; 
    } 
 
} 
 
 
 |