mirror of
https://github.com/Karaka-Management/phpOMS.git
synced 2026-01-17 12:28:41 +00:00
Data mapper cleanup and join/update preparation
This commit is contained in:
parent
98b72df5a4
commit
d53cb93b79
|
|
@ -33,15 +33,29 @@ use phpOMS\DataStorage\Database\Query\Builder;
|
|||
interface DataMapperInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* Create data.
|
||||
*
|
||||
* @param mixed $obj Object reference (gets filled with insert id)
|
||||
*
|
||||
* @return mixed
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||
*/
|
||||
public function create($obj);
|
||||
|
||||
/**
|
||||
* Update data.
|
||||
*
|
||||
* @param mixed $obj Object reference (gets filled with insert id)
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||
*/
|
||||
public function update();
|
||||
public function update($obj);
|
||||
|
||||
/**
|
||||
* Save data.
|
||||
|
|
|
|||
|
|
@ -181,16 +181,6 @@ abstract class DataMapperAbstract implements DataMapperInterface
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update data.
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||
*/
|
||||
public function update()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Save data.
|
||||
*
|
||||
|
|
@ -234,14 +224,14 @@ abstract class DataMapperAbstract implements DataMapperInterface
|
|||
*
|
||||
* @param mixed $obj Object reference (gets filled with insert id)
|
||||
*
|
||||
* @return Builder
|
||||
* @return mixed
|
||||
*
|
||||
* @throws
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||
*/
|
||||
public function create(&$obj)
|
||||
public function create($obj)
|
||||
{
|
||||
$query = new Builder($this->db);
|
||||
$query->prefix($this->db->getPrefix())
|
||||
|
|
@ -336,6 +326,57 @@ abstract class DataMapperAbstract implements DataMapperInterface
|
|||
return $objId;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create object in db.
|
||||
*
|
||||
* @param mixed $obj Object reference (gets filled with insert id)
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @throws
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||
*/
|
||||
public function update($obj)
|
||||
{
|
||||
// todo: relations handling (needs to be done first)... updating, deleting or inserting are possible
|
||||
|
||||
$query = new Builder($this->db);
|
||||
$query->prefix($this->db->getPrefix())
|
||||
->into(static::$table);
|
||||
|
||||
$reflectionClass = new \ReflectionClass(get_class($obj));
|
||||
$properties = $reflectionClass->getProperties();
|
||||
|
||||
foreach ($properties as $property) {
|
||||
$property->setAccessible(true);
|
||||
|
||||
if (isset(static::$hasMany[($pname = $property->getName())])) {
|
||||
continue;
|
||||
} else {
|
||||
/* is not a has many property */
|
||||
foreach (static::$columns as $key => $column) {
|
||||
if ($column['internal'] === $pname) {
|
||||
$value = $property->getValue($obj);
|
||||
|
||||
if ($column['type'] === 'DateTime') {
|
||||
$value = isset($value) ? $value->format('Y-m-d H:i:s') : null;
|
||||
}
|
||||
|
||||
$query->update($column['name'])
|
||||
->value($value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// todo: do i have to reverse the accessibility or is there no risk involved here?
|
||||
}
|
||||
|
||||
$this->db->con->prepare($query->toSql())->execute();
|
||||
}
|
||||
|
||||
/**
|
||||
* Find data.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -349,19 +349,6 @@ class Builder
|
|||
return $this->grammar->compileQuery($this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Executing.
|
||||
*
|
||||
* @return mixed
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||
*/
|
||||
public function execute()
|
||||
{
|
||||
// todo: handle different query types (select, insert etc)
|
||||
}
|
||||
|
||||
/**
|
||||
* Make raw column selection.
|
||||
*
|
||||
|
|
@ -733,11 +720,6 @@ class Builder
|
|||
{
|
||||
}
|
||||
|
||||
public function get()
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert into columns.
|
||||
*
|
||||
|
|
@ -813,10 +795,14 @@ class Builder
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function update() : Builder
|
||||
public function update(...$columns) : Builder
|
||||
{
|
||||
$this->type = QueryType::UPDATE;
|
||||
|
||||
foreach ($columns as $key => $column) {
|
||||
$this->inserts[] = $column;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
|
@ -828,28 +814,6 @@ class Builder
|
|||
{
|
||||
}
|
||||
|
||||
public function delete()
|
||||
{
|
||||
$this->type = QueryType::DELETE;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function create($table)
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function drop()
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function raw()
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function join($table1, $table2, $column1, $opperator, $column2)
|
||||
{
|
||||
return $this;
|
||||
|
|
@ -880,9 +844,9 @@ class Builder
|
|||
return $this;
|
||||
}
|
||||
|
||||
public function commit() : Builder
|
||||
public function on()
|
||||
{
|
||||
return $this;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -898,7 +862,19 @@ class Builder
|
|||
return $this->type;
|
||||
}
|
||||
|
||||
public function merge($query) : Builder
|
||||
/**
|
||||
* Merging query.
|
||||
*
|
||||
* Merging query in order to remove database query volume
|
||||
*
|
||||
* @param Builder $query Query
|
||||
*
|
||||
* @return Builder
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||
*/
|
||||
public function merge(Builder $query) : Builder
|
||||
{
|
||||
return clone($this);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -412,6 +412,17 @@ class Grammar extends \phpOMS\DataStorage\Database\Grammar
|
|||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* Compile offset.
|
||||
*
|
||||
* @param Builder $query Builder
|
||||
* @param array $groups Groups
|
||||
*
|
||||
* @return \string
|
||||
*
|
||||
* @since 1.0.0
|
||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||
*/
|
||||
private function compileGroups(Builder $query, array $groups)
|
||||
{
|
||||
$expression = '';
|
||||
|
|
|
|||
44
DataStorage/Database/Query/JoinType.php
Normal file
44
DataStorage/Database/Query/JoinType.php
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
<?php
|
||||
/**
|
||||
* Orange Management
|
||||
*
|
||||
* PHP Version 7.0
|
||||
*
|
||||
* @category TBD
|
||||
* @package TBD
|
||||
* @author OMS Development Team <dev@oms.com>
|
||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||
* @copyright 2013 Dennis Eichhorn
|
||||
* @license OMS License 1.0
|
||||
* @version 1.0.0
|
||||
* @link http://orange-management.com
|
||||
*/
|
||||
namespace phpOMS\DataStorage\Database\Query;
|
||||
|
||||
use phpOMS\Datatypes\Enum;
|
||||
|
||||
/**
|
||||
* Query type enum.
|
||||
*
|
||||
* @category Framework
|
||||
* @package phpOMS\DataStorage\Database
|
||||
* @author OMS Development Team <dev@oms.com>
|
||||
* @author Dennis Eichhorn <d.eichhorn@oms.com>
|
||||
* @license OMS License 1.0
|
||||
* @link http://orange-management.com
|
||||
* @since 1.0.0
|
||||
*/
|
||||
abstract class JoinType extends Enum
|
||||
{
|
||||
const JOIN = 'JOIN';
|
||||
const LEFT_JOIN = 'LEFT JOIN';
|
||||
const LEFT_OUTER_JOIN = 'LEFT OUTER JOIN';
|
||||
const LEFT_INNER_JOIN = 'LEFT INNER JOIN';
|
||||
const RIGHT_JOIN = 'RIGHT JOIN';
|
||||
const RIGHT_OUTER_JOIN = 'RIGHT OUTER JOIN';
|
||||
const RIGHT_INNER_JOIN = 'RIGHT INNER JOIN';
|
||||
const OUTER_JOIN = 'OUTER JOIN';
|
||||
const INNER_JOIN = 'INNER JOIN';
|
||||
const CROSS_JOIN = 'CROSS JOIN';
|
||||
const FULL_OUTER_JOIN = 'FULL OUTER JOIN';
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user