<?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;
}
}
|