diff --git a/packages/Doctrine/src/Rector/Class_/AddUuidMirrorForRelationPropertyRector.php b/packages/Doctrine/src/Rector/Class_/AddUuidMirrorForRelationPropertyRector.php index 44af9d549a7a..d0f3491d650c 100644 --- a/packages/Doctrine/src/Rector/Class_/AddUuidMirrorForRelationPropertyRector.php +++ b/packages/Doctrine/src/Rector/Class_/AddUuidMirrorForRelationPropertyRector.php @@ -13,6 +13,7 @@ use Rector\Doctrine\Collector\UuidMigrationDataCollector; use Rector\Doctrine\PhpDocParser\Ast\PhpDoc\PhpDocTagNodeFactory; use Rector\DoctrinePhpDocParser\Ast\PhpDoc\Property_\JoinColumnTagValueNode; +use Rector\DoctrinePhpDocParser\Ast\PhpDoc\Property_\OneToOneTagValueNode; use Rector\DoctrinePhpDocParser\Contract\Ast\PhpDoc\DoctrineRelationTagValueNodeInterface; use Rector\DoctrinePhpDocParser\Contract\Ast\PhpDoc\ToManyTagNodeInterface; use Rector\DoctrinePhpDocParser\Contract\Ast\PhpDoc\ToOneTagNodeInterface; @@ -176,7 +177,6 @@ private function shouldSkipProperty(Class_ $class, Property $property): bool } $uuidPropertyName = $this->getName($property) . 'Uuid'; - if ($this->hasClassPropertyName($class, $uuidPropertyName)) { return true; } @@ -190,6 +190,20 @@ private function shouldSkipProperty(Class_ $class, Property $property): bool return true; } + /** @var PhpDocInfo|null $propertyPhpDocInfo */ + $propertyPhpDocInfo = $this->getPhpDocInfo($property); + if ($propertyPhpDocInfo === null) { + return true; + } + + $oneToOneTagValueNode = $propertyPhpDocInfo->getByType(OneToOneTagValueNode::class); + if ($oneToOneTagValueNode) { + // skip mappedBy oneToOne, as the column doesn't really exist + if ($oneToOneTagValueNode->getMappedBy()) { + return true; + } + } + return false; } diff --git a/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/AddUuidMirrorForRelationPropertyRectorTest.php b/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/AddUuidMirrorForRelationPropertyRectorTest.php index d8a1c5126e6b..2a35218bb4d7 100644 --- a/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/AddUuidMirrorForRelationPropertyRectorTest.php +++ b/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/AddUuidMirrorForRelationPropertyRectorTest.php @@ -22,8 +22,10 @@ public function provideDataForTest(): iterable { yield [__DIR__ . '/Fixture/to_one.php.inc']; yield [__DIR__ . '/Fixture/to_many.php.inc']; + // skip yield [__DIR__ . '/Fixture/skip_already_added.php.inc']; yield [__DIR__ . '/Fixture/skip_to_many_without_target_entity_uuid.php.inc']; + yield [__DIR__ . '/Fixture/skip_one_to_one_mapped_by.php.inc']; } protected function getRectorClass(): string diff --git a/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/Fixture/skip_one_to_one_mapped_by.php.inc b/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/Fixture/skip_one_to_one_mapped_by.php.inc new file mode 100644 index 000000000000..36090d853b78 --- /dev/null +++ b/packages/Doctrine/tests/Rector/Class_/AddUuidMirrorForRelationPropertyRector/Fixture/skip_one_to_one_mapped_by.php.inc @@ -0,0 +1,35 @@ +