diff --git a/CHANGELOG b/CHANGELOG index f6fde6c7..dbf81d5e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +3.12.1 (unreleased): + * Fix Hydrator: disable identity map now prevent storing entities + 3.12.0 (2025-04-17): * add __debuginfo() in NotifyInterface to reduce context when dumping an entity * Driver now supports reconnect, useful in forked processes diff --git a/src/Ting/Repository/Hydrator.php b/src/Ting/Repository/Hydrator.php index bdc1da1e..f83ba380 100644 --- a/src/Ting/Repository/Hydrator.php +++ b/src/Ting/Repository/Hydrator.php @@ -329,22 +329,13 @@ function (Metadata $metadata) use ($column, &$result): void { } } - if ($id !== '') { - $ref = $column['table'] . '-' . $id; - if (isset($this->references[$ref]) === true) { - - // This entity was already created and stored into references - if ($this->identityMap === false) { - // If identityMap is disabled, it clones the object and reset UUID - $result[$column['table']] = clone $this->references[$ref]; - } else { - // If identityMap is enabled, it uses the same object - $result[$column['table']] = $this->references[$ref]; - } - $validEntities[$column['table']] = true; - $fromReferences[$column['table']] = true; - continue; - } + if ($id !== '' && $this->identityMap && isset($this->references[$ref = $column['table'] . '-' . $id]) === true) { + // This entity was already created and stored into references + // If identityMap is enabled, reuse the same object + $result[$column['table']] = $this->references[$ref]; + $validEntities[$column['table']] = true; + $fromReferences[$column['table']] = true; + continue; } if (isset($result[$column['table']]) === false) { @@ -416,7 +407,7 @@ function (Metadata $metadata) use ($column, &$result): void { } } - if (isset($this->references[$ref]) === false) { + if (isset($this->references[$ref]) === false && $this->identityMap) { $this->references[$ref] = $entity; } }