From 53657299a7522da903ff42818f7bfb2a3e2839e8 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 4 Jul 2020 17:43:33 +0200 Subject: [PATCH] fix creating conditional elements --- DataStorage/Database/DataMapperAbstract.php | 37 ++++++++++++++++++--- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/DataStorage/Database/DataMapperAbstract.php b/DataStorage/Database/DataMapperAbstract.php index 1cbd8bf59..8f0240128 100644 --- a/DataStorage/Database/DataMapperAbstract.php +++ b/DataStorage/Database/DataMapperAbstract.php @@ -740,6 +740,28 @@ class DataMapperAbstract implements DataMapperInterface $values = $property->getValue($obj); + /** @var self $mapper */ + $mapper = static::$hasMany[$propertyName]['mapper']; + + if (\is_object($values)) { + // conditionals + $relReflectionClass = new \ReflectionClass($values); + $relProperty = $relReflectionClass->getProperty($mapper::$columns[static::$hasMany[$propertyName]['external']]['internal']); + + if (!$isPublic) { + $relProperty->setAccessible(true); + } + + $relProperty->setValue($values, $objId); + + if (!$isPublic) { + $relProperty->setAccessible(false); + } + + $mapper::create($values); + continue; + } + if (!\is_array($values)) { // conditionals continue; @@ -749,8 +771,6 @@ class DataMapperAbstract implements DataMapperInterface $property->setAccessible(false); } - /** @var self $mapper */ - $mapper = static::$hasMany[$propertyName]['mapper']; $objsIds = []; $relReflectionClass = !empty($values) ? new \ReflectionClass(\reset($values)) : null; @@ -816,13 +836,22 @@ class DataMapperAbstract implements DataMapperInterface $values = $obj[$propertyName] ?? null; - if (!\is_array($values)) { + /** @var self $mapper */ + $mapper = static::$hasMany[$propertyName]['mapper']; + + if (\is_object($values)) { // conditionals + $values[$mapper::$columns[static::$hasMany[$propertyName]['external']]['internal']] = $objId; + + $mapper::createArray($values); + continue; + } + + if (!\is_array($values)) { continue; } /** @var self $mapper */ - $mapper = static::$hasMany[$propertyName]['mapper']; $objsIds = []; foreach ($values as $key => &$value) {