From 7b48b20443ef8ca2d65c1f53b2f43e0c7578b18c Mon Sep 17 00:00:00 2001 From: Artur Welp Date: Thu, 25 Apr 2019 04:07:06 -0300 Subject: [PATCH] Implementing idpolices resolve #5 --- .gitignore | 3 ++- src/ORM/Entity.php | 57 +++++++++++++++++++++++++++++++++++++--------- src/index.php | 17 +++++++++++++- 3 files changed, 64 insertions(+), 13 deletions(-) mode change 100755 => 100644 .gitignore diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 index 83ad9a2..20a2004 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /netbeans -/.idea \ No newline at end of file +/.idea +/nbproject \ No newline at end of file diff --git a/src/ORM/Entity.php b/src/ORM/Entity.php index 95ef195..b9ebf82 100755 --- a/src/ORM/Entity.php +++ b/src/ORM/Entity.php @@ -14,12 +14,18 @@ abstract class Entity { 'connectionName', 'timestamps', 'softdelete', - 'tableName' + 'tableName', + '_idPolice' ); - const _properties = Array(); - + /* + * [type] = nextval| manual | empty is the default + * [max] = maximum value allowed + * [min] = minumul value allowed + * [step] = increment by n each id + */ + const _idPolice = Array(); function __construct() { if (isset($this->timestamps) && $this->timestamps) { @@ -35,11 +41,11 @@ abstract class Entity { $this->$property = $value; } - public function __toString(){ - if(isset($this->name)){ + public function __toString() { + if (isset($this->name)) { return $this->name; } - if(isset($this->nome)){ + if (isset($this->nome)) { return $this->nome; } return static::class; @@ -54,7 +60,7 @@ abstract class Entity { } return json_encode($properties); } - + public function save() { if (isset($this->id)) { $this->update(); @@ -64,6 +70,12 @@ abstract class Entity { } private function update() { + //First check if the record exist. If not, we might have a idPolice + if (!DBInstance::queryOne("SELECT id FROM {" . static::tableName . "} WHERE id = ?", Array($this->id))) { + $this->create(); + return; + } + $updatekeys = static::_ignore; $updatekeys[] = 'id'; $columns = array_diff(array_keys(get_object_vars($this)), $updatekeys); @@ -85,9 +97,29 @@ abstract class Entity { } private function create() { + + + if (!empty(static::_idPolice) && static::_idPolice['type'] != 'manual') { + $maxVal = DBInstance::queryOne("SELECT max(id) as id FROM {" . static::tableName . "}"); + $maxVal = ($maxVal) ? $maxVal : 0; + + if (isset(static::_idPolice['min']) && static::_idPolice['min'] > $maxVal->id) { + $this->id = static::_idPolice['min']; + } else { + if (isset(static::_idPolice['step'])) { + $this->id = $maxVal->id + static::_idPolice['step']; + } else { + $this->id = $maxVal->id + 1; + } + } + if (isset(static::_idPolice['max']) && $maxVal->id > static::_idPolice['max']) { + return false; + } + } + var_dump($this); $columns = array_diff(array_keys(get_object_vars($this)), static::_ignore); $obj = (array) $this; - + $first_argument = ''; $second_argument = ''; $insert_data = Array(); @@ -103,8 +135,11 @@ abstract class Entity { $second_argument = rtrim($second_argument, ', '); $sql = "INSERT INTO {" . static::tableName . "} ($first_argument) VALUES ($second_argument)"; + DBInstance::execute($sql, $insert_data, static::connectionName); - $this->id = DBInstance::lastInsert(); + if ( empty(static::_idPolice) ){ + $this->id = DBInstance::lastInsert(); + } } public function delete() { @@ -240,7 +275,7 @@ abstract class Entity { $criteria_data = Array(); $limits = Array("LIMIT" => 1); - + if (is_numeric($criterias)) { $criteria_sql = "WHERE id = ? "; $criteria_data[] = $criterias; @@ -279,7 +314,7 @@ abstract class Entity { } else { $sql = "SELECT $select_sql FROM {" . static::tableName . "} $criteria_sql $limits_sql"; } - + $results = DBInstance::query($sql, $criteria_data, static::connectionName); $objects = Array(); diff --git a/src/index.php b/src/index.php index a2975a6..7e6c34a 100644 --- a/src/index.php +++ b/src/index.php @@ -28,6 +28,16 @@ class Estado extends Entity { } +class Estado_ extends Entity { + + const tableName = 'estado_novo'; + const _idPolice = Array( + 'type' => 'nextval', + 'min' => 500/*, + 'step' => 10*/); +} + + class Municipio extends Entity { const tableName = 'basico_geografico_municipios'; @@ -110,4 +120,9 @@ Connections::addConnection($conn); //$a->load(1); //$a->estado(); -var_dump( DBInstance::queryOne('SELECT * FROM {estado}')); \ No newline at end of file +//var_dump( DBInstance::queryOne('SELECT max(id) as id FROM {estado}')); + +$a = new Estado_(); +$a->nome = 'Estado 1'; +$a->save(); +var_dump($a); \ No newline at end of file