From bf6655a534a6775d30cafa67bd801276bda1d98d Mon Sep 17 00:00:00 2001 From: polo Date: Tue, 13 Aug 2024 23:45:21 +0200 Subject: =?UTF-8?q?VERSION=200.2=20doctrine=20ORM=20et=20entit=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../orm/src/Utility/IdentifierFlattener.php | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 vendor/doctrine/orm/src/Utility/IdentifierFlattener.php (limited to 'vendor/doctrine/orm/src/Utility/IdentifierFlattener.php') diff --git a/vendor/doctrine/orm/src/Utility/IdentifierFlattener.php b/vendor/doctrine/orm/src/Utility/IdentifierFlattener.php new file mode 100644 index 0000000..3792d33 --- /dev/null +++ b/vendor/doctrine/orm/src/Utility/IdentifierFlattener.php @@ -0,0 +1,83 @@ + + */ + public function flattenIdentifier(ClassMetadata $class, array $id): array + { + $flatId = []; + + foreach ($class->identifier as $field) { + if (isset($class->associationMappings[$field]) && isset($id[$field]) && is_a($id[$field], $class->associationMappings[$field]->targetEntity)) { + $targetClassMetadata = $this->metadataFactory->getMetadataFor( + $class->associationMappings[$field]->targetEntity, + ); + assert($targetClassMetadata instanceof ClassMetadata); + + if ($this->unitOfWork->isInIdentityMap($id[$field])) { + $associatedId = $this->flattenIdentifier($targetClassMetadata, $this->unitOfWork->getEntityIdentifier($id[$field])); + } else { + $associatedId = $this->flattenIdentifier($targetClassMetadata, $targetClassMetadata->getIdentifierValues($id[$field])); + } + + $flatId[$field] = implode(' ', $associatedId); + } elseif (isset($class->associationMappings[$field])) { + assert($class->associationMappings[$field]->isToOneOwningSide()); + $associatedId = []; + + foreach ($class->associationMappings[$field]->joinColumns as $joinColumn) { + $associatedId[] = $id[$joinColumn->name]; + } + + $flatId[$field] = implode(' ', $associatedId); + } else { + if ($id[$field] instanceof BackedEnum) { + $flatId[$field] = $id[$field]->value; + } else { + $flatId[$field] = $id[$field]; + } + } + } + + return $flatId; + } +} -- cgit v1.2.3