From 5005bbe62b955c1665dc09485edd46d0b8497185 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 2 Apr 2012 14:55:35 +0300 Subject: [PATCH] In some weird situation the SimpleXmlIterator used to iterate on the ``$xmlRoot->field`` property just get resetted. This solution avoid this situation. This problem occurs when Symfony2 warms up cache with autogenerate proxy to ``true`` --- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 70a530046..3b2e54ac4 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -166,6 +166,9 @@ class XmlDriver extends AbstractFileDriver $metadata->table['options'] = $this->_parseOptions($xmlRoot->options->children()); } + // The mapping assignement is done in 2 times as a bug might occurs on some php/xml lib versions + // The internal SimpleXmlIterator get resetted, to this generate a duplicate field exception + $mappings = array(); // Evaluate mappings if (isset($xmlRoot->field)) { foreach ($xmlRoot->field as $fieldMapping) { @@ -213,10 +216,14 @@ class XmlDriver extends AbstractFileDriver $mapping['options'] = $this->_parseOptions($fieldMapping->options->children()); } - $metadata->mapField($mapping); + $mappings[] = $mapping; } } + foreach ($mappings as $mapping) { + $metadata->mapField($mapping); + } + // Evaluate mappings $associationIds = array(); foreach ($xmlRoot->id as $idElement) {