diff --git a/psalm-baseline.xml b/psalm-baseline.xml
index c175642e62b..7a3b729e849 100644
--- a/psalm-baseline.xml
+++ b/psalm-baseline.xml
@@ -1492,6 +1492,7 @@
+
@@ -1501,13 +1502,8 @@
-
+
-
-
-
diff --git a/src/Proxy/ProxyFactory.php b/src/Proxy/ProxyFactory.php
index 0660c423f0d..5b2d2eca0c9 100644
--- a/src/Proxy/ProxyFactory.php
+++ b/src/Proxy/ProxyFactory.php
@@ -360,11 +360,11 @@ private function createInitializer(ClassMetadata $classMetadata, EntityPersister
*/
private function createLazyInitializer(ClassMetadata $classMetadata, EntityPersister $entityPersister, IdentifierFlattener $identifierFlattener): Closure
{
- return static function (InternalProxy $proxy, InternalProxy $original) use ($entityPersister, $classMetadata, $identifierFlattener): void {
- $identifier = $classMetadata->getIdentifierValues($original);
- $entity = $entityPersister->loadById($identifier, $original);
+ return static function (InternalProxy $proxy) use ($entityPersister, $classMetadata, $identifierFlattener): void {
+ $identifier = $classMetadata->getIdentifierValues($proxy);
+ $original = $entityPersister->loadById($identifier);
- if ($entity === null) {
+ if ($original === null) {
throw EntityNotFoundException::fromClassNameAndIdentifier(
$classMetadata->getName(),
$identifierFlattener->flattenIdentifier($classMetadata, $identifier)
@@ -382,7 +382,7 @@ private function createLazyInitializer(ClassMetadata $classMetadata, EntityPersi
continue;
}
- $property->setValue($proxy, $property->getValue($entity));
+ $property->setValue($proxy, $property->getValue($original));
}
};
}
@@ -468,9 +468,7 @@ private function getProxyFactory(string $className): Closure
$identifierFields = array_intersect_key($class->getReflectionProperties(), $identifiers);
$proxyFactory = Closure::bind(static function (array $identifier) use ($initializer, $skippedProperties, $identifierFields, $className): InternalProxy {
- $proxy = self::createLazyGhost(static function (InternalProxy $object) use ($initializer, &$proxy): void {
- $initializer($object, $proxy);
- }, $skippedProperties);
+ $proxy = self::createLazyGhost($initializer, $skippedProperties);
foreach ($identifierFields as $idField => $reflector) {
if (! isset($identifier[$idField])) {
diff --git a/tests/Tests/ORM/Proxy/ProxyFactoryTest.php b/tests/Tests/ORM/Proxy/ProxyFactoryTest.php
index 3739aaf4dd5..d0989953def 100644
--- a/tests/Tests/ORM/Proxy/ProxyFactoryTest.php
+++ b/tests/Tests/ORM/Proxy/ProxyFactoryTest.php
@@ -65,7 +65,7 @@ public function testReferenceProxyDelegatesLoadingToThePersister(): void
{
$identifier = ['id' => 42];
$proxyClass = 'Proxies\__CG__\Doctrine\Tests\Models\ECommerce\ECommerceFeature';
- $persister = $this->getMockBuilderWithOnlyMethods(BasicEntityPersister::class, ['load'])
+ $persister = $this->getMockBuilderWithOnlyMethods(BasicEntityPersister::class, ['loadById'])
->disableOriginalConstructor()
->getMock();
@@ -75,8 +75,8 @@ public function testReferenceProxyDelegatesLoadingToThePersister(): void
$persister
->expects(self::atLeastOnce())
- ->method('load')
- ->with(self::equalTo($identifier), self::isInstanceOf($proxyClass))
+ ->method('loadById')
+ ->with(self::equalTo($identifier))
->will(self::returnValue($proxy));
$proxy->getDescription();