Merge pull request #988 from holtkamp/DDC-3047-Exporter-association-fetch-modes
Exporter support for association fetch modes
This commit is contained in:
commit
4029dc2ea8
@ -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
|
||||
*
|
||||
|
@ -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(
|
||||
|
@ -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']) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -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")}
|
||||
|
@ -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',
|
||||
|
@ -25,14 +25,14 @@
|
||||
<field name="name" column="name" type="string" length="50" nullable="true" unique="true" />
|
||||
<field name="email" column="user_email" type="string" column-definition="CHAR(32) NOT NULL" />
|
||||
|
||||
<one-to-one field="address" target-entity="Doctrine\Tests\ORM\Tools\Export\Address" inversed-by="user" orphan-removal="true">
|
||||
<one-to-one field="address" target-entity="Doctrine\Tests\ORM\Tools\Export\Address" inversed-by="user" orphan-removal="true" fetch="EAGER">
|
||||
<cascade><cascade-persist /></cascade>
|
||||
<join-column name="address_id" referenced-column-name="id" on-delete="CASCADE" on-update="CASCADE"/>
|
||||
</one-to-one>
|
||||
|
||||
<many-to-one field="mainGroup" target-entity="Doctrine\Tests\ORM\Tools\Export\Group" />
|
||||
|
||||
<one-to-many field="phonenumbers" target-entity="Doctrine\Tests\ORM\Tools\Export\Phonenumber" mapped-by="user" orphan-removal="true">
|
||||
<one-to-many field="phonenumbers" target-entity="Doctrine\Tests\ORM\Tools\Export\Phonenumber" mapped-by="user" orphan-removal="true" fetch="LAZY">
|
||||
<cascade>
|
||||
<cascade-persist/>
|
||||
<cascade-merge/>
|
||||
@ -52,7 +52,7 @@
|
||||
</cascade>
|
||||
</one-to-many>
|
||||
|
||||
<many-to-many field="groups" target-entity="Doctrine\Tests\ORM\Tools\Export\Group">
|
||||
<many-to-many field="groups" target-entity="Doctrine\Tests\ORM\Tools\Export\Group" fetch="EXTRA_LAZY">
|
||||
<cascade>
|
||||
<cascade-all/>
|
||||
</cascade>
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user