*/ 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; } }