From 5507e0be29ec7b6d078e4389ec59158a002f057f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20G=C4=85sowski?= Date: Thu, 23 Mar 2017 19:12:40 +0100 Subject: [PATCH 1/3] Fix wrong variable name Fix $fieldMapping to $embeddedClass in generateEmbeddedPropertyDocBlock --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 8d1f05ac1..5bc292a37 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1731,7 +1731,7 @@ public function __construct() $embedded = ['class="' . $embeddedClass['class'] . '"']; - if (isset($fieldMapping['columnPrefix'])) { + if (isset($embeddedClass['columnPrefix'])) { $embedded[] = 'columnPrefix=' . var_export($embeddedClass['columnPrefix'], true); } From 7a63e81c9458adc486ae22ad57ee857eae89bbba Mon Sep 17 00:00:00 2001 From: Artem Stepin Date: Thu, 8 Jun 2017 23:18:47 +0200 Subject: [PATCH 2/3] Add failing test for gh-#6314 (gh-#6356) --- .../Tests/ORM/Tools/EntityGeneratorTest.php | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 5a9f451fe..35e19cf65 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -119,7 +119,7 @@ class EntityGeneratorTest extends OrmTestCase /** * @return ClassMetadataInfo */ - private function generateIsbnEmbeddableFixture(array $embeddedClasses = []) + private function generateIsbnEmbeddableFixture(array $embeddedClasses = [], $columnPrefix = null) { $metadata = new ClassMetadataInfo($this->_namespace . '\EntityGeneratorIsbn'); $metadata->namespace = $this->_namespace; @@ -131,7 +131,7 @@ class EntityGeneratorTest extends OrmTestCase $metadata->mapField(['fieldName' => 'checkDigit', 'type' => 'integer']); foreach ($embeddedClasses as $fieldName => $embeddedClass) { - $this->mapEmbedded($fieldName, $metadata, $embeddedClass); + $this->mapEmbedded($fieldName, $metadata, $embeddedClass, $columnPrefix); } $this->_generator->writeEntityClass($metadata, $this->_tmpDir); @@ -224,6 +224,26 @@ class EntityGeneratorTest extends OrmTestCase return new $metadata->name; } + /** + * @group GH-6314 + */ + public function testEmbeddedEntityWithColumnPrefix() + { + $testMetadata = $this->generateTestEmbeddableFixture(); + $isbnMetadata = $this->generateIsbnEmbeddableFixture(['testEmbedded' => $testMetadata], 'prefix'); + $isbnEntity = $this->newInstance($isbnMetadata); + $refClass = new \ReflectionClass($isbnEntity); + + self::assertTrue($refClass->hasProperty('testEmbedded')); + + + $docComment = $refClass->getProperty('testEmbedded')->getDocComment(); + + $needle = sprintf('@Embedded(class="%s", columnPrefix=\'%s\')', $testMetadata->name,'prefix'); + self::assertContains($needle, $docComment); + + } + public function testGeneratedEntityClass() { $testMetadata = $this->generateTestEmbeddableFixture(); From 799190d5e4cb0533778969c7e22f4c7d5961d096 Mon Sep 17 00:00:00 2001 From: Artem Stepin Date: Fri, 9 Jun 2017 22:25:19 +0200 Subject: [PATCH 3/3] - fixed columnPrefix generator for the embedded annotation --- lib/Doctrine/ORM/Tools/EntityGenerator.php | 6 ++++- .../Tests/ORM/Tools/EntityGeneratorTest.php | 25 ++++++++++++++----- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 5bc292a37..fafa51f3d 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -1732,7 +1732,11 @@ public function __construct() $embedded = ['class="' . $embeddedClass['class'] . '"']; if (isset($embeddedClass['columnPrefix'])) { - $embedded[] = 'columnPrefix=' . var_export($embeddedClass['columnPrefix'], true); + if (is_string($embeddedClass['columnPrefix'])) { + $embedded[] = 'columnPrefix="' . $embeddedClass['columnPrefix'] . '"'; + } else { + $embedded[] = 'columnPrefix=' . var_export($embeddedClass['columnPrefix'], true); + } } $lines[] = $this->spaces . ' * @' . diff --git a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php index 35e19cf65..f2d74d043 100644 --- a/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php +++ b/tests/Doctrine/Tests/ORM/Tools/EntityGeneratorTest.php @@ -227,21 +227,34 @@ class EntityGeneratorTest extends OrmTestCase /** * @group GH-6314 */ - public function testEmbeddedEntityWithColumnPrefix() + public function testEmbeddedEntityWithNamedColumnPrefix() { + $columnPrefix = 'GH6314Prefix_'; $testMetadata = $this->generateTestEmbeddableFixture(); - $isbnMetadata = $this->generateIsbnEmbeddableFixture(['testEmbedded' => $testMetadata], 'prefix'); + $isbnMetadata = $this->generateIsbnEmbeddableFixture(['testEmbedded' => $testMetadata], $columnPrefix); $isbnEntity = $this->newInstance($isbnMetadata); $refClass = new \ReflectionClass($isbnEntity); - self::assertTrue($refClass->hasProperty('testEmbedded')); + $docComment = $refClass->getProperty('testEmbedded')->getDocComment(); + $needle = sprintf('@Embedded(class="%s", columnPrefix="%s")', $testMetadata->name, $columnPrefix); + self::assertContains($needle, $docComment); + } + + /** + * @group GH-6314 + */ + public function testEmbeddedEntityWithoutColumnPrefix() + { + $testMetadata = $this->generateTestEmbeddableFixture(); + $isbnMetadata = $this->generateIsbnEmbeddableFixture(['testEmbedded' => $testMetadata], false); + $isbnEntity = $this->newInstance($isbnMetadata); + $refClass = new \ReflectionClass($isbnEntity); + self::assertTrue($refClass->hasProperty('testEmbedded')); $docComment = $refClass->getProperty('testEmbedded')->getDocComment(); - - $needle = sprintf('@Embedded(class="%s", columnPrefix=\'%s\')', $testMetadata->name,'prefix'); + $needle = sprintf('@Embedded(class="%s", columnPrefix=false)', $testMetadata->name); self::assertContains($needle, $docComment); - } public function testGeneratedEntityClass()