Quellcode durchsuchen

Implementing idpolices resolve #5

Artur Welp vor 6 Jahren
Ursprung
Commit
7b48b20443
3 geänderte Dateien mit 64 neuen und 13 gelöschten Zeilen
  1. 2 1
      .gitignore
  2. 46 11
      src/ORM/Entity.php
  3. 16 1
      src/index.php

+ 2 - 1
.gitignore

@@ -1,2 +1,3 @@
 /netbeans
-/.idea
+/.idea
+/nbproject

+ 46 - 11
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();
 

+ 16 - 1
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}'));
+//var_dump( DBInstance::queryOne('SELECT max(id) as id FROM {estado}'));
+
+$a = new Estado_();
+$a->nome = 'Estado 1';
+$a->save();
+var_dump($a);