|
|
@@ -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();
|
|
|
|