diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php
index a0216bf91..3e96af821 100644
--- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php
+++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php
@@ -200,6 +200,25 @@ abstract class AbstractExporter
}
}
+ /**
+ * @param int $mode
+ *
+ * @return string
+ */
+ protected function _getFetchModeString($mode)
+ {
+ switch ($mode) {
+ case ClassMetadataInfo::FETCH_EAGER:
+ return 'EAGER';
+
+ case ClassMetadataInfo::FETCH_EXTRA_LAZY:
+ return 'EXTRA_LAZY';
+
+ case ClassMetadataInfo::FETCH_LAZY:
+ return 'LAZY';
+ }
+ }
+
/**
* @param int $policy
*
diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php
index 778c30f49..29eb37afc 100644
--- a/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php
+++ b/lib/Doctrine/ORM/Tools/Export/Driver/PhpExporter.php
@@ -108,6 +108,10 @@ class PhpExporter extends AbstractExporter
'cascade' => $cascade,
);
+ if (isset($associationMapping['fetch'])) {
+ $associationMappingArray['fetch'] = $associationMapping['fetch'];
+ }
+
if ($associationMapping['type'] & ClassMetadataInfo::TO_ONE) {
$method = 'mapOneToOne';
$oneToOneMappingArray = array(
diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php
index 094889c1a..8d1bfc37c 100644
--- a/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php
+++ b/lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php
@@ -265,6 +265,10 @@ class XmlExporter extends AbstractExporter
if (isset($associationMapping['orphanRemoval']) && $associationMapping['orphanRemoval'] !== false) {
$associationMappingXml->addAttribute('orphan-removal', 'true');
}
+
+ if (isset($associationMapping['fetch'])) {
+ $associationMappingXml->addAttribute('fetch', $this->_getFetchModeString($associationMapping['fetch']));
+ }
$cascade = array();
if ($associationMapping['isCascadeRemove']) {
diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php
index 4b401c9f0..177cebfab 100644
--- a/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php
+++ b/lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php
@@ -154,6 +154,10 @@ class YamlExporter extends AbstractExporter
'cascade' => $cascade,
);
+ if (isset($associationMapping['fetch'])) {
+ $associationMappingArray['fetch'] = $this->_getFetchModeString($associationMapping['fetch']);
+ }
+
if (isset($mapping['id']) && $mapping['id'] === true) {
$array['id'][$name]['associationKey'] = true;
}
diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php
index c792746cc..3ad2c88f1 100644
--- a/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php
+++ b/tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php
@@ -226,7 +226,7 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
$this->assertEquals(1, count($nodes));
}
else {
- $this->markTestSkipped('Test available only for '.$type.' driver');
+ $this->markTestSkipped('Test not available for '.$type.' driver');
}
}
@@ -248,6 +248,7 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
$this->assertFalse($class->associationMappings['address']['isCascadeMerge']);
$this->assertFalse($class->associationMappings['address']['isCascadeDetach']);
$this->assertTrue($class->associationMappings['address']['orphanRemoval']);
+ $this->assertEquals(ClassMetadataInfo::FETCH_EAGER, $class->associationMappings['address']['fetch']);
return $class;
}
@@ -279,6 +280,7 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
$this->assertTrue($class->associationMappings['phonenumbers']['isCascadeMerge']);
$this->assertFalse($class->associationMappings['phonenumbers']['isCascadeDetach']);
$this->assertTrue($class->associationMappings['phonenumbers']['orphanRemoval']);
+ $this->assertEquals(ClassMetadataInfo::FETCH_LAZY, $class->associationMappings['phonenumbers']['fetch']);
return $class;
}
@@ -306,6 +308,7 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
$this->assertTrue($class->associationMappings['groups']['isCascadeRefresh']);
$this->assertTrue($class->associationMappings['groups']['isCascadeMerge']);
$this->assertTrue($class->associationMappings['groups']['isCascadeDetach']);
+ $this->assertEquals(ClassMetadataInfo::FETCH_EXTRA_LAZY, $class->associationMappings['groups']['fetch']);
return $class;
}
@@ -376,7 +379,7 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
$this->assertEquals('all', $value['Doctrine\Tests\ORM\Tools\Export\ExportedUser']['oneToMany']['interests']['cascade'][0]);
} else {
- $this->markTestSkipped('Test available only for '.$type.' driver');
+ $this->markTestSkipped('Test not available for '.$type.' driver');
}
}
public function __destruct()
diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php
index f153a7c83..3bac8c2ae 100644
--- a/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php
+++ b/tests/Doctrine/Tests/ORM/Tools/Export/annotation/Doctrine.Tests.ORM.Tools.Export.User.php
@@ -23,7 +23,7 @@ class User
public $email;
/**
- * @OneToOne(targetEntity="Doctrine\Tests\ORM\Tools\Export\Address", inversedBy="user", cascade={"persist"}, orphanRemoval=true)
+ * @OneToOne(targetEntity="Doctrine\Tests\ORM\Tools\Export\Address", inversedBy="user", cascade={"persist"}, orphanRemoval=true, fetch="EAGER")
* @JoinColumn(name="address_id", onDelete="CASCADE")
*/
public $address;
@@ -41,7 +41,7 @@ class User
public $phonenumbers;
/**
- * @ManyToMany(targetEntity="Doctrine\Tests\ORM\Tools\Export\Group", cascade={"all"})
+ * @ManyToMany(targetEntity="Doctrine\Tests\ORM\Tools\Export\Group", cascade={"all"}, fetch="EXTRA_LAZY")
* @JoinTable(name="cms_users_groups",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id", nullable=false, unique=false)},
* inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id", columnDefinition="INT NULL")}
diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php
index f272ca0aa..061934b9b 100644
--- a/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php
+++ b/tests/Doctrine/Tests/ORM/Tools/Export/php/Doctrine.Tests.ORM.Tools.Export.User.php
@@ -55,6 +55,7 @@ $metadata->mapOneToOne(array(
),
),
'orphanRemoval' => true,
+ 'fetch' => ClassMetadataInfo::FETCH_EAGER,
));
$metadata->mapOneToMany(array(
'fieldName' => 'phonenumbers',
@@ -66,6 +67,7 @@ $metadata->mapOneToMany(array(
),
'mappedBy' => 'user',
'orphanRemoval' => true,
+ 'fetch' => ClassMetadataInfo::FETCH_LAZY,
'orderBy' =>
array(
'number' => 'ASC',
@@ -74,6 +76,7 @@ $metadata->mapOneToMany(array(
$metadata->mapManyToMany(array(
'fieldName' => 'groups',
'targetEntity' => 'Doctrine\\Tests\\ORM\\Tools\\Export\\Group',
+ 'fetch' => ClassMetadataInfo::FETCH_EXTRA_LAZY,
'cascade' =>
array(
0 => 'remove',
diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml b/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml
index dfec31ec0..8e30948e8 100644
--- a/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml
+++ b/tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml
@@ -25,14 +25,14 @@
-
+
-
+
@@ -52,7 +52,7 @@
-
+
diff --git a/tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml b/tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml
index b43aefad7..1a5b77609 100644
--- a/tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml
+++ b/tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml
@@ -29,6 +29,7 @@ Doctrine\Tests\ORM\Tools\Export\User:
cascade: [ persist ]
inversedBy: user
orphanRemoval: true
+ fetch: EAGER
manyToOne:
mainGroup:
targetEntity: Doctrine\Tests\ORM\Tools\Export\Group
@@ -40,6 +41,7 @@ Doctrine\Tests\ORM\Tools\Export\User:
number: ASC
cascade: [ persist, merge ]
orphanRemoval: true
+ fetch: LAZY
interests:
targetEntity: Doctrine\Tests\ORM\Tools\Export\Interests
mappedBy: user
@@ -48,6 +50,7 @@ Doctrine\Tests\ORM\Tools\Export\User:
manyToMany:
groups:
targetEntity: Doctrine\Tests\ORM\Tools\Export\Group
+ fetch: EXTRA_LAZY
joinTable:
name: cms_users_groups
joinColumns: