From 23f31d359a4b9f9aa4cb44fe2939c33dba502888 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 15 Sep 2018 14:18:58 +0200 Subject: [PATCH] Prevent creating existing object in database --- DataStorage/Database/DataMapperAbstract.php | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/DataStorage/Database/DataMapperAbstract.php b/DataStorage/Database/DataMapperAbstract.php index c8076846f..e8915a36d 100644 --- a/DataStorage/Database/DataMapperAbstract.php +++ b/DataStorage/Database/DataMapperAbstract.php @@ -346,8 +346,13 @@ class DataMapperAbstract implements DataMapperInterface } $refClass = new \ReflectionClass($obj); - $objId = self::createModel($obj, $refClass); - self::setObjectId($refClass, $obj, $objId); + + if (!empty($id = self::getObjectId($obj, $refClass))) { + $objId = $id; + } else { + $objId = self::createModel($obj, $refClass); + self::setObjectId($refClass, $obj, $objId); + } if ($relations === RelationType::ALL) { self::createHasMany($refClass, $obj, $objId); @@ -370,9 +375,13 @@ class DataMapperAbstract implements DataMapperInterface { self::extend(__CLASS__); - $objId = self::createModelArray($obj); - \settype($objId, static::$columns[static::$primaryField]['type']); - $obj[static::$columns[static::$primaryField]['internal']] = $objId; + if (!empty($id = $obj[static::$columns[static::$primaryField]['internal']])) { + $objId = $id; + } else { + $objId = self::createModelArray($obj); + \settype($objId, static::$columns[static::$primaryField]['type']); + $obj[static::$columns[static::$primaryField]['internal']] = $objId; + } if ($relations === RelationType::ALL) { self::createHasManyArray($obj, $objId); @@ -1378,7 +1387,7 @@ class DataMapperAbstract implements DataMapperInterface { self::extend(__CLASS__); - if (!isset($obj)) { + if (empty($obj)) { return null; }