diff --git a/docs/en/tutorials/embeddables.rst b/docs/en/tutorials/embeddables.rst index cf13fd56e..be565bf2c 100644 --- a/docs/en/tutorials/embeddables.rst +++ b/docs/en/tutorials/embeddables.rst @@ -117,7 +117,7 @@ The following example shows you how to set your prefix to ``myPrefix_``: columnPrefix: myPrefix_ To have Doctrine drop the prefix and use the value object's property name -directly, set ``columnPrefix=false`` (not yet supported with XML configuration): +directly, set ``columnPrefix=false`` (``use-column-prefix="false"`` for XML): .. configuration-block:: @@ -141,6 +141,12 @@ directly, set ``columnPrefix=false`` (not yet supported with XML configuration): class: Address columnPrefix: false + .. code-block:: xml + + + + + DQL --- diff --git a/doctrine-mapping.xsd b/doctrine-mapping.xsd index a6440a2e8..6a7e2a284 100644 --- a/doctrine-mapping.xsd +++ b/doctrine-mapping.xsd @@ -304,6 +304,7 @@ + diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 45836a6b9..2797fb126 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -255,11 +255,20 @@ class XmlDriver extends FileDriver if (isset($xmlRoot->embedded)) { foreach ($xmlRoot->embedded as $embeddedMapping) { + $columnPrefix = isset($embeddedMapping['column-prefix']) + ? (string) $embeddedMapping['column-prefix'] + : null; + + $useColumnPrefix = isset($embeddedMapping['use-column-prefix']) + ? $this->evaluateBoolean($embeddedMapping['use-column-prefix']) + : true; + $mapping = array( 'fieldName' => (string) $embeddedMapping['name'], 'class' => (string) $embeddedMapping['class'], - 'columnPrefix' => isset($embeddedMapping['column-prefix']) ? (string) $embeddedMapping['column-prefix'] : null, + 'columnPrefix' => $useColumnPrefix ? $columnPrefix : false ); + $metadata->mapEmbedded($mapping); } } @@ -781,7 +790,7 @@ class XmlDriver extends FileDriver * * @return array The list of cascade options. */ - private function _getCascadeMappings($cascadeElement) + private function _getCascadeMappings(SimpleXMLElement $cascadeElement) { $cascades = array(); /* @var $action SimpleXmlElement */ @@ -833,6 +842,6 @@ class XmlDriver extends FileDriver { $flag = (string)$element; - return ($flag === true || $flag == "true" || $flag == "1"); + return ($flag == "true" || $flag == "1"); } } diff --git a/tests/Doctrine/Tests/Models/DDC3293/DDC3293Address.php b/tests/Doctrine/Tests/Models/DDC3293/DDC3293Address.php new file mode 100644 index 000000000..70358b74c --- /dev/null +++ b/tests/Doctrine/Tests/Models/DDC3293/DDC3293Address.php @@ -0,0 +1,10 @@ +assertEquals(true, $class->isEmbeddedClass); } + /** + * @group DDC-3293 + * @group DDC-3477 + * @group 1238 + */ + public function testEmbeddedMappingsWithUseColumnPrefix() + { + $factory = new ClassMetadataFactory(); + $em = $this->_getTestEntityManager(); + + $em->getConfiguration()->setMetadataDriverImpl($this->_loadDriver()); + $factory->setEntityManager($em); + + $this->assertEquals( + '__prefix__', + $factory + ->getMetadataFor('Doctrine\Tests\Models\DDC3293\DDC3293UserPrefixed') + ->embeddedClasses['address']['columnPrefix'] + ); + } + + /** + * @group DDC-3293 + * @group DDC-3477 + * @group 1238 + */ + public function testEmbeddedMappingsWithFalseUseColumnPrefix() + { + $factory = new ClassMetadataFactory(); + $em = $this->_getTestEntityManager(); + + $em->getConfiguration()->setMetadataDriverImpl($this->_loadDriver()); + $factory->setEntityManager($em); + + $this->assertFalse( + $factory + ->getMetadataFor('Doctrine\Tests\Models\DDC3293\DDC3293User') + ->embeddedClasses['address']['columnPrefix'] + ); + } + public function testEmbeddedMapping() { $class = $this->createClassMetadata('Doctrine\Tests\Models\ValueObjects\Person'); diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC3293.DDC3293Address.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC3293.DDC3293Address.dcm.xml new file mode 100644 index 000000000..39c0f33b2 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC3293.DDC3293Address.dcm.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC3293.DDC3293User.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC3293.DDC3293User.dcm.xml new file mode 100644 index 000000000..bf24c1fd6 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC3293.DDC3293User.dcm.xml @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC3293.DDC3293UserPrefixed.dcm.xml b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC3293.DDC3293UserPrefixed.dcm.xml new file mode 100644 index 000000000..1e0df304c --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Mapping/xml/Doctrine.Tests.Models.DDC3293.DDC3293UserPrefixed.dcm.xml @@ -0,0 +1,17 @@ + + + + + + + + +