aboutsummaryrefslogtreecommitdiffstats
path: root/core/namespace/ORM/Entity.php
diff options
context:
space:
mode:
authorThomas Lange <code@nerdmind.de>2021-08-10 17:42:11 +0200
committerThomas Lange <code@nerdmind.de>2021-08-10 19:41:49 +0200
commite3f05b25f961e0169185acabd32566e2ae5198fe (patch)
tree8c60ddc5d558983ad3bf4b20ca643b109410082b /core/namespace/ORM/Entity.php
parent49f03ac48efcce79822bed1ec40ad48bf5c6e450 (diff)
downloadblog-e3f05b25f961e0169185acabd32566e2ae5198fe.tar.gz
blog-e3f05b25f961e0169185acabd32566e2ae5198fe.tar.xz
blog-e3f05b25f961e0169185acabd32566e2ae5198fe.zip
Add a better mechanism to detect Entity changes
Implement and use a better mechanism to detect changes of attributes of the Entity objects by using a private variable which keeps track of the changed Entity attributes ("properties") via the "set" method. The "insert" and "update" method of the Repository now calls the method "getModifiedKeys" of the Entity class to get a list of properties which have been changed and builds the database query accordingly. This makes the use of "FALSE" as default value for the Entity attributes obsolete, so they have been set to the initial PHP default ("NULL").
Diffstat (limited to 'core/namespace/ORM/Entity.php')
-rw-r--r--core/namespace/ORM/Entity.php16
1 files changed, 11 insertions, 5 deletions
diff --git a/core/namespace/ORM/Entity.php b/core/namespace/ORM/Entity.php
index 9cc7755..a19b1f4 100644
--- a/core/namespace/ORM/Entity.php
+++ b/core/namespace/ORM/Entity.php
@@ -6,6 +6,9 @@ abstract class Entity implements EntityInterface {
protected $time_insert;
protected $time_update;
+ # Modified attributes
+ private $_modified = [];
+
#===============================================================================
# Get attribute
#===============================================================================
@@ -17,6 +20,11 @@ abstract class Entity implements EntityInterface {
# Set attribute
#===============================================================================
public function set(string $attribute, $value) {
+ if($this->{$attribute} !== $value) {
+ !in_array($attribute, $this->_modified) &&
+ array_push($this->_modified, $attribute);
+ }
+
return $this->{$attribute} = $value;
}
@@ -39,11 +47,9 @@ abstract class Entity implements EntityInterface {
}
#===============================================================================
- # Get array with all non-false attributes
+ # Get an array of modified attribute keys
#===============================================================================
- public function getFilteredAttributes(): array {
- return array_filter(get_object_vars($this), function($value) {
- return $value !== FALSE;
- });
+ public function getModifiedKeys(): array {
+ return $this->_modified;
}
}