Skip to content

Commit

Permalink
Root document Entity Map
Browse files Browse the repository at this point in the history
  • Loading branch information
José Ángel Parada committed Feb 4, 2025
1 parent bf9f889 commit be39197
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions lib/Doctrine/ODM/MongoDB/UnitOfWork.php
Original file line number Diff line number Diff line change
Expand Up @@ -1505,11 +1505,11 @@ public function addToIdentityMap(object $document): bool
$class = $this->dm->getClassMetadata($document::class);
$id = $this->getIdForIdentityMap($document);

if (isset($this->identityMap[$class->name][$id])) {
if (isset($this->identityMap[$class->rootDocumentName][$id])) {
return false;
}

$this->identityMap[$class->name][$id] = $document;
$this->identityMap[$class->rootDocumentName][$id] = $document;

if ($document instanceof NotifyPropertyChanged && ! $this->isUninitializedObject($document)) {
$document->addPropertyChangedListener($this);
Expand Down Expand Up @@ -1597,8 +1597,8 @@ public function removeFromIdentityMap(object $document): bool
$class = $this->dm->getClassMetadata($document::class);
$id = $this->getIdForIdentityMap($document);

if (isset($this->identityMap[$class->name][$id])) {
unset($this->identityMap[$class->name][$id]);
if (isset($this->identityMap[$class->rootDocumentName][$id])) {
unset($this->identityMap[$class->rootDocumentName][$id]);
$this->documentStates[$oid] = self::STATE_DETACHED;

return true;
Expand Down Expand Up @@ -1629,7 +1629,7 @@ public function getById($id, ClassMetadata $class): object

$serializedId = serialize($class->getDatabaseIdentifierValue($id));

return $this->identityMap[$class->name][$serializedId];
return $this->identityMap[$class->rootDocumentName][$serializedId];
}

/**
Expand Down Expand Up @@ -1658,7 +1658,7 @@ public function tryGetById($id, ClassMetadata $class)

$serializedId = serialize($class->getDatabaseIdentifierValue($id));

return $this->identityMap[$class->name][$serializedId] ?? false;
return $this->identityMap[$class->rootDocumentName][$serializedId] ?? false;
}

/**
Expand Down Expand Up @@ -1688,7 +1688,7 @@ public function isInIdentityMap(object $document): bool
$class = $this->dm->getClassMetadata($document::class);
$id = $this->getIdForIdentityMap($document);

return isset($this->identityMap[$class->name][$id]);
return isset($this->identityMap[$class->rootDocumentName][$id]);
}

private function getIdForIdentityMap(object $document): string
Expand Down Expand Up @@ -2768,13 +2768,13 @@ public function getOrCreateDocument(string $className, array $data, array &$hint
if (! $class->isQueryResultDocument) {
$id = $class->getDatabaseIdentifierValue($data['_id']);
$serializedId = serialize($id);
$isManagedObject = isset($this->identityMap[$class->name][$serializedId]);
$isManagedObject = isset($this->identityMap[$class->rootDocumentName][$serializedId]);
}

$oid = null;
if ($isManagedObject) {
/** @phpstan-var T $document */
$document = $this->identityMap[$class->name][$serializedId];
$document = $this->identityMap[$class->rootDocumentName][$serializedId];
$oid = spl_object_hash($document);
if ($this->isUninitializedObject($document)) {
$document->setProxyInitializer(null);
Expand All @@ -2800,7 +2800,7 @@ public function getOrCreateDocument(string $className, array $data, array &$hint
$this->registerManaged($document, $id, $data);
$oid = spl_object_hash($document);
$this->documentStates[$oid] = self::STATE_MANAGED;
$this->identityMap[$class->name][$serializedId] = $document;
$this->identityMap[$class->rootDocumentName][$serializedId] = $document;
}

$data = $this->hydratorFactory->hydrate($document, $data, $hints);
Expand Down

0 comments on commit be39197

Please sign in to comment.