Skip to content

Commit b5ed1ca

Browse files
Fix cloning entities
1 parent 1a5a4c6 commit b5ed1ca

File tree

3 files changed

+11
-8
lines changed

3 files changed

+11
-8
lines changed

psalm-baseline.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1502,7 +1502,9 @@
15021502
<code><![CDATA[__wakeup]]></code>
15031503
</UndefinedInterfaceMethod>
15041504
<UndefinedMethod>
1505-
<code><![CDATA[self::createLazyGhost($initializer, $skippedProperties)]]></code>
1505+
<code><![CDATA[$proxy = self::createLazyGhost(static function (InternalProxy $object) use ($initializer, $identifier): void {
1506+
$initializer($object, $identifier);
1507+
}, $skippedProperties);]]></code>
15061508
</UndefinedMethod>
15071509
<UnresolvableInclude>
15081510
<code><![CDATA[require $fileName]]></code>

src/Proxy/ProxyFactory.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -360,9 +360,8 @@ private function createInitializer(ClassMetadata $classMetadata, EntityPersister
360360
*/
361361
private function createLazyInitializer(ClassMetadata $classMetadata, EntityPersister $entityPersister, IdentifierFlattener $identifierFlattener): Closure
362362
{
363-
return static function (InternalProxy $proxy) use ($entityPersister, $classMetadata, $identifierFlattener): void {
364-
$identifier = $classMetadata->getIdentifierValues($proxy);
365-
$original = $entityPersister->loadById($identifier);
363+
return static function (InternalProxy $proxy, array $identifier) use ($entityPersister, $classMetadata, $identifierFlattener): void {
364+
$original = $entityPersister->loadById($identifier);
366365

367366
if ($original === null) {
368367
throw EntityNotFoundException::fromClassNameAndIdentifier(
@@ -375,10 +374,10 @@ private function createLazyInitializer(ClassMetadata $classMetadata, EntityPersi
375374
return;
376375
}
377376

378-
$class = $entityPersister->getClassMetadata();
377+
$class = $entityPersister->getClassMetadata();
379378

380379
foreach ($class->getReflectionProperties() as $property) {
381-
if (! $class->hasField($property->name) && ! $class->hasAssociation($property->name)) {
380+
if (isset($identifier[$property->name]) || ! $class->hasField($property->name) && ! $class->hasAssociation($property->name)) {
382381
continue;
383382
}
384383

@@ -468,7 +467,9 @@ private function getProxyFactory(string $className): Closure
468467
$identifierFields = array_intersect_key($class->getReflectionProperties(), $identifiers);
469468

470469
$proxyFactory = Closure::bind(static function (array $identifier) use ($initializer, $skippedProperties, $identifierFields, $className): InternalProxy {
471-
$proxy = self::createLazyGhost($initializer, $skippedProperties);
470+
$proxy = self::createLazyGhost(static function (InternalProxy $object) use ($initializer, $identifier): void {
471+
$initializer($object, $identifier);
472+
}, $skippedProperties);
472473

473474
foreach ($identifierFields as $idField => $reflector) {
474475
if (! isset($identifier[$idField])) {

tests/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ protected function setUp(): void
5858
public function testPersistUpdate(): void
5959
{
6060
// Considering case (a)
61-
$proxy = $this->_em->getProxyFactory()->getProxy(CmsUser::class, ['id' => 123]);
61+
$proxy = $this->_em->getProxyFactory()->getProxy(CmsUser::class, ['id' => $this->user->getId()]);
6262

6363
$proxy->id = null;
6464
$proxy->username = 'ocra';

0 commit comments

Comments
 (0)