Skip to content

Commit bab5771

Browse files
authored
Merge pull request #12034 from doctrine/3.4.x
Merge 3.4.x up into 3.5.x
2 parents 49293c4 + ee919d6 commit bab5771

File tree

5 files changed

+29
-39
lines changed

5 files changed

+29
-39
lines changed

phpstan-baseline.neon

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3450,12 +3450,6 @@ parameters:
34503450
count: 1
34513451
path: src/UnitOfWork.php
34523452

3453-
-
3454-
message: '#^PHPDoc tag @phpstan\-assert\-if\-true for \$obj contains generic interface Doctrine\\ORM\\Proxy\\InternalProxy but does not specify its types\: T$#'
3455-
identifier: missingType.generics
3456-
count: 1
3457-
path: src/UnitOfWork.php
3458-
34593453
-
34603454
message: '#^Parameter \#2 \$assoc of method Doctrine\\ORM\\PersistentCollection\<\(int\|string\),mixed\>\:\:setOwner\(\) expects Doctrine\\ORM\\Mapping\\AssociationMapping&Doctrine\\ORM\\Mapping\\ToManyAssociationMapping, Doctrine\\ORM\\Mapping\\ManyToManyInverseSideMapping\|Doctrine\\ORM\\Mapping\\ManyToManyOwningSideMapping\|Doctrine\\ORM\\Mapping\\ManyToOneAssociationMapping\|Doctrine\\ORM\\Mapping\\OneToManyAssociationMapping\|Doctrine\\ORM\\Mapping\\OneToOneInverseSideMapping\|Doctrine\\ORM\\Mapping\\OneToOneOwningSideMapping given\.$#'
34613455
identifier: argument.type
@@ -3498,6 +3492,12 @@ parameters:
34983492
count: 1
34993493
path: src/UnitOfWork.php
35003494

3495+
-
3496+
message: '#^Unable to resolve the template type T in call to method static method Symfony\\Component\\VarExporter\\Hydrator\:\:hydrate\(\)$#'
3497+
identifier: argument.templateType
3498+
count: 1
3499+
path: src/UnitOfWork.php
3500+
35013501
-
35023502
message: '#^Access to an undefined property Doctrine\\Persistence\\Mapping\\ClassMetadata\:\:\$name\.$#'
35033503
identifier: property.notFound

src/UnitOfWork.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3050,11 +3050,7 @@ public function initializeObject(object $obj): void
30503050
}
30513051
}
30523052

3053-
/**
3054-
* Tests if a value is an uninitialized entity.
3055-
*
3056-
* @phpstan-assert-if-true InternalProxy $obj
3057-
*/
3053+
/** Tests if a value is an uninitialized entity. */
30583054
public function isUninitializedObject(mixed $obj): bool
30593055
{
30603056
if ($this->em->getConfiguration()->isNativeLazyObjectsEnabled() && ! ($obj instanceof Collection) && is_object($obj)) {

tests/Performance/LazyLoading/ProxyInitializationTimeBench.php

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Doctrine\Performance\LazyLoading;
66

7+
use Doctrine\ORM\EntityManager;
78
use Doctrine\ORM\Proxy\InternalProxy as Proxy;
89
use Doctrine\Performance\EntityManagerFactory;
910
use Doctrine\Performance\Mock\NonProxyLoadingEntityManager;
@@ -25,9 +26,11 @@ final class ProxyInitializationTimeBench
2526
/** @var Proxy[] */
2627
private array|null $initializedEmployees = null;
2728

29+
private EntityManager $em;
30+
2831
public function init(): void
2932
{
30-
$proxyFactory = (new NonProxyLoadingEntityManager(EntityManagerFactory::getEntityManager([])))
33+
$proxyFactory = (new NonProxyLoadingEntityManager($this->em = EntityManagerFactory::getEntityManager([])))
3134
->getProxyFactory();
3235

3336
for ($i = 0; $i < 10000; ++$i) {
@@ -36,36 +39,36 @@ public function init(): void
3639
$this->initializedUsers[$i] = $proxyFactory->getProxy(CmsUser::class, ['id' => $i]);
3740
$this->initializedEmployees[$i] = $proxyFactory->getProxy(CmsEmployee::class, ['id' => $i]);
3841

39-
$this->initializedUsers[$i]->__load();
40-
$this->initializedEmployees[$i]->__load();
42+
$this->em->getUnitOfWork()->initializeObject($this->initializedUsers[$i]);
43+
$this->em->getUnitOfWork()->initializeObject($this->initializedEmployees[$i]);
4144
}
4245
}
4346

4447
public function benchCmsUserInitialization(): void
4548
{
4649
foreach ($this->cmsUsers as $proxy) {
47-
$proxy->__load();
50+
$this->em->getUnitOfWork()->initializeObject($proxy);
4851
}
4952
}
5053

5154
public function benchCmsEmployeeInitialization(): void
5255
{
5356
foreach ($this->cmsEmployees as $proxy) {
54-
$proxy->__load();
57+
$this->em->getUnitOfWork()->initializeObject($proxy);
5558
}
5659
}
5760

5861
public function benchInitializationOfAlreadyInitializedCmsUsers(): void
5962
{
6063
foreach ($this->initializedUsers as $proxy) {
61-
$proxy->__load();
64+
$this->em->getUnitOfWork()->initializeObject($proxy);
6265
}
6366
}
6467

6568
public function benchInitializationOfAlreadyInitializedCmsEmployees(): void
6669
{
6770
foreach ($this->initializedEmployees as $proxy) {
68-
$proxy->__load();
71+
$this->em->getUnitOfWork()->initializeObject($proxy);
6972
}
7073
}
7174
}

tests/Tests/ORM/Functional/ProxiesLikeEntitiesTest.php

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
use Doctrine\Tests\OrmFunctionalTestCase;
1515
use Doctrine\Tests\Proxies\__CG__\Doctrine\Tests\Models\CMS\CmsUser as CmsUserProxy;
1616

17-
use function assert;
18-
1917
/**
2018
* Test that Doctrine ORM correctly works with proxy instances exactly like with ordinary Entities
2119
*
@@ -34,10 +32,6 @@ protected function setUp(): void
3432
{
3533
parent::setUp();
3634

37-
if ($this->_em->getConfiguration()->isNativeLazyObjectsEnabled()) {
38-
self::markTestSkipped('This test is not applicable when lazy proxy is enabled.');
39-
}
40-
4135
$this->createSchemaForModels(
4236
CmsUser::class,
4337
CmsTag::class,
@@ -83,8 +77,7 @@ public function testEntityWithIdentifier(): void
8377
{
8478
$userId = $this->user->getId();
8579
$uninitializedProxy = $this->_em->getReference(CmsUser::class, $userId);
86-
assert($uninitializedProxy instanceof CmsUserProxy);
87-
self::assertInstanceOf(CmsUserProxy::class, $uninitializedProxy);
80+
$this->assertTrue($this->isUninitializedObject($uninitializedProxy));
8881

8982
$this->_em->persist($uninitializedProxy);
9083
$this->_em->flush();
@@ -116,6 +109,10 @@ public function testProxyAsDqlParameterPersist(): void
116109
*/
117110
public function testFindWithProxyName(): void
118111
{
112+
if ($this->_em->getConfiguration()->isNativeLazyObjectsEnabled()) {
113+
self::markTestSkipped('There is no such thing as a proxy class name when native lazy objects are enabled.');
114+
}
115+
119116
$result = $this->_em->find(CmsUserProxy::class, $this->user->getId());
120117
self::assertSame($this->user->getId(), $result->getId());
121118
$this->_em->clear();

tests/Tests/ORM/Functional/Ticket/GH10808Test.php

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
use Doctrine\ORM\UnitOfWork;
1515
use Doctrine\Tests\OrmFunctionalTestCase;
1616
use PHPUnit\Framework\Attributes\Group;
17-
18-
use function get_class;
17+
use ReflectionClass;
1918

2019
#[Group('GH10808')]
2120
class GH10808Test extends OrmFunctionalTestCase
@@ -32,10 +31,6 @@ protected function setUp(): void
3231

3332
public function testDQLDeferredEagerLoad(): void
3433
{
35-
if ($this->_em->getConfiguration()->isNativeLazyObjectsEnabled()) {
36-
self::markTestSkipped('Test requires lazy loading to be disabled');
37-
}
38-
3934
$appointment = new GH10808Appointment();
4035

4136
$this->_em->persist($appointment);
@@ -55,14 +50,13 @@ public function testDQLDeferredEagerLoad(): void
5550

5651
$eagerLoadResult = $query->setHint(UnitOfWork::HINT_DEFEREAGERLOAD, false)->getSingleResult();
5752

58-
self::assertNotEquals(
59-
GH10808AppointmentChild::class,
60-
get_class($deferredLoadResult->child),
61-
'$deferredLoadResult->child should be a proxy',
53+
$reflector = new ReflectionClass(GH10808AppointmentChild::class);
54+
self::assertFalse(
55+
$this->isUninitializedObject($deferredLoadResult->child),
56+
'$deferredLoadResult->child should be a native lazy object',
6257
);
63-
self::assertEquals(
64-
GH10808AppointmentChild::class,
65-
get_class($eagerLoadResult->child),
58+
self::assertFalse(
59+
$this->isUninitializedObject($deferredLoadResult->child),
6660
'$eagerLoadResult->child should not be a proxy',
6761
);
6862
}

0 commit comments

Comments
 (0)