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 @@
+
+
+
+
+
+
+
+
+