Skip to content

Commit 5ad5b11

Browse files
authored
Merge pull request doctrine#11769 from HypeMC/fix-reportfieldswheredeclared
Fix fields of transient classes being considered duplicate with `reportFieldsWhereDeclared`
2 parents c12fd2c + 4feaa47 commit 5ad5b11

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

src/Mapping/Driver/ReflectionBasedDriver.php

+5
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,13 @@ private function isRepeatedPropertyDeclaration(ReflectionProperty $property, Cla
3232
|| $metadata->isInheritedEmbeddedClass($property->name);
3333
}
3434

35+
/** @var class-string $declaringClass */
3536
$declaringClass = $property->class;
3637

38+
if ($this->isTransient($declaringClass)) {
39+
return isset($metadata->fieldMappings[$property->name]);
40+
}
41+
3742
if (
3843
isset($metadata->fieldMappings[$property->name]['declared'])
3944
&& $metadata->fieldMappings[$property->name]['declared'] === $declaringClass

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

+44
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,15 @@ public function classesThatOverrideFieldNames(): Generator
3232
yield 'Entity class that redeclares a protected field inherited from a base entity' => [GH10450EntityChildProtected::class];
3333
yield 'Entity class that redeclares a protected field inherited from a mapped superclass' => [GH10450MappedSuperclassChildProtected::class];
3434
}
35+
36+
public function testFieldsOfTransientClassesAreNotConsideredDuplicate(): void
37+
{
38+
$em = $this->getTestEntityManager();
39+
40+
$metadata = $em->getClassMetadata(GH10450Cat::class);
41+
42+
self::assertArrayHasKey('id', $metadata->fieldMappings);
43+
}
3544
}
3645

3746
/**
@@ -179,3 +188,38 @@ class GH10450MappedSuperclassChildProtected extends GH10450BaseMappedSuperclassP
179188
*/
180189
protected $field;
181190
}
191+
192+
abstract class GH10450AbstractEntity
193+
{
194+
/**
195+
* @ORM\Column(type="integer")
196+
* @ORM\Id
197+
* @ORM\GeneratedValue
198+
*
199+
* @var int
200+
*/
201+
protected $id;
202+
}
203+
204+
/**
205+
* @ORM\Entity
206+
* @ORM\InheritanceType("SINGLE_TABLE")
207+
* @ORM\DiscriminatorMap({ "cat": "GH10450Cat" })
208+
* @ORM\DiscriminatorColumn(name="type")
209+
*/
210+
abstract class GH10450Animal extends GH10450AbstractEntity
211+
{
212+
/**
213+
* @ORM\Column(type="text", name="base")
214+
*
215+
* @var string
216+
*/
217+
private $field;
218+
}
219+
220+
/**
221+
* @ORM\Entity
222+
*/
223+
class GH10450Cat extends GH10450Animal
224+
{
225+
}

0 commit comments

Comments
 (0)