From e0081b59beb7e82e6c918694ecbbaca38e090026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= Date: Mon, 19 Feb 2024 22:17:51 +0100 Subject: [PATCH] Account for inversedBy being a non-falsy-string or null It is supposed to hold the name of a PHP property, and those cannot be falsy strings. --- src/Internal/Hydration/ObjectHydrator.php | 4 ++-- src/Mapping/Builder/ClassMetadataBuilder.php | 6 +++--- src/Persisters/Entity/BasicEntityPersister.php | 2 +- src/Tools/SchemaValidator.php | 2 +- src/UnitOfWork.php | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/Internal/Hydration/ObjectHydrator.php b/src/Internal/Hydration/ObjectHydrator.php index c83c1e4701e..d24323d8689 100644 --- a/src/Internal/Hydration/ObjectHydrator.php +++ b/src/Internal/Hydration/ObjectHydrator.php @@ -91,7 +91,7 @@ protected function prepare(): void } // handle fetch-joined owning side bi-directional one-to-one associations - if ($assoc->inversedBy) { + if ($assoc->inversedBy !== null) { $class = $this->getClassMetadata($className); $inverseAssoc = $class->associationMappings[$assoc->inversedBy]; @@ -439,7 +439,7 @@ protected function hydrateRowData(array $row, array &$result): void if ($relation->isOwningSide()) { // TODO: Just check hints['fetched'] here? // If there is an inverse mapping on the target class its bidirectional - if ($relation->inversedBy) { + if ($relation->inversedBy !== null) { $inverseAssoc = $targetClass->associationMappings[$relation->inversedBy]; if ($inverseAssoc->isToOne()) { $targetClass->reflFields[$inverseAssoc->fieldName]->setValue($element, $parentObject); diff --git a/src/Mapping/Builder/ClassMetadataBuilder.php b/src/Mapping/Builder/ClassMetadataBuilder.php index 0f208f29139..b9d3cc81f5e 100644 --- a/src/Mapping/Builder/ClassMetadataBuilder.php +++ b/src/Mapping/Builder/ClassMetadataBuilder.php @@ -288,7 +288,7 @@ public function addManyToOne( ): ClassMetadataBuilder { $builder = $this->createManyToOne($name, $targetEntity); - if ($inversedBy) { + if ($inversedBy !== null) { $builder->inversedBy($inversedBy); } @@ -348,7 +348,7 @@ public function addOwningOneToOne( ): ClassMetadataBuilder { $builder = $this->createOneToOne($name, $targetEntity); - if ($inversedBy) { + if ($inversedBy !== null) { $builder->inversedBy($inversedBy); } @@ -380,7 +380,7 @@ public function addOwningManyToMany( ): ClassMetadataBuilder { $builder = $this->createManyToMany($name, $targetEntity); - if ($inversedBy) { + if ($inversedBy !== null) { $builder->inversedBy($inversedBy); } diff --git a/src/Persisters/Entity/BasicEntityPersister.php b/src/Persisters/Entity/BasicEntityPersister.php index e6b09774408..679e8a17069 100644 --- a/src/Persisters/Entity/BasicEntityPersister.php +++ b/src/Persisters/Entity/BasicEntityPersister.php @@ -764,7 +764,7 @@ public function loadOneToOneEntity(AssociationMapping $assoc, object $sourceEnti $targetClass = $this->em->getClassMetadata($assoc->targetEntity); if ($assoc->isOwningSide()) { - $isInverseSingleValued = $assoc->inversedBy && ! $targetClass->isCollectionValuedAssociation($assoc->inversedBy); + $isInverseSingleValued = $assoc->inversedBy !== null && ! $targetClass->isCollectionValuedAssociation($assoc->inversedBy); // Mark inverse side as fetched in the hints, otherwise the UoW would // try to load it in a separate query (remember: to-one inverse sides can not be lazy). diff --git a/src/Tools/SchemaValidator.php b/src/Tools/SchemaValidator.php index 43b10ee3983..6ebe991876c 100644 --- a/src/Tools/SchemaValidator.php +++ b/src/Tools/SchemaValidator.php @@ -162,7 +162,7 @@ public function validateClass(ClassMetadata $class): array } } - if ($assoc->isOwningSide() && $assoc->inversedBy) { + if ($assoc->isOwningSide() && $assoc->inversedBy !== null) { if ($targetMetadata->hasField($assoc->inversedBy)) { $ce[] = 'The association ' . $class->name . '#' . $fieldName . ' refers to the inverse side ' . 'field ' . $assoc->targetEntity . '#' . $assoc->inversedBy . ' which is not defined as association.'; diff --git a/src/UnitOfWork.php b/src/UnitOfWork.php index 3b020c955f2..5c16c511ce1 100644 --- a/src/UnitOfWork.php +++ b/src/UnitOfWork.php @@ -2550,7 +2550,7 @@ public function createEntity(string $className, array $data, array &$hints = []) $this->originalEntityData[$oid][$field] = $newValue; $class->reflFields[$field]->setValue($entity, $newValue); - if ($assoc->inversedBy && $assoc->isOneToOne() && $newValue !== null) { + if ($assoc->inversedBy !== null && $assoc->isOneToOne() && $newValue !== null) { $inverseAssoc = $targetClass->associationMappings[$assoc->inversedBy]; $targetClass->reflFields[$inverseAssoc->fieldName]->setValue($newValue, $entity); }