Skip to content
Browse files

Merge pull request #158 from goetas/cascade-all

Collapsed cascade elements, if cascade-all.
  • Loading branch information...
2 parents ef0a901 + d09285e commit 0d4e0626cf20d052dc55d249d70be4f9923f832a @beberlei beberlei committed Nov 18, 2011
View
3 lib/Doctrine/ORM/Tools/Export/Driver/XmlExporter.php
@@ -279,6 +279,9 @@ public function exportClassMetadata(ClassMetadataInfo $metadata)
if ($associationMapping['isCascadeDetach']) {
$cascade[] = 'cascade-detach';
}
+ if (count($cascade) === 5) {
+ $cascade = array('cascade-all');
+ }
if ($cascade) {
$cascadeXml = $associationMappingXml->addChild('cascade');
foreach ($cascade as $type) {
View
3 lib/Doctrine/ORM/Tools/Export/Driver/YamlExporter.php
@@ -147,6 +147,9 @@ public function exportClassMetadata(ClassMetadataInfo $metadata)
if ($associationMapping['isCascadeDetach']) {
$cascade[] = 'detach';
}
+ if (count($cascade) === 5) {
+ $cascade = array('all');
+ }
$associationMappingArray = array(
'targetEntity' => $associationMapping['targetEntity'],
'cascade' => $cascade,
View
28 tests/Doctrine/Tests/ORM/Tools/Export/AbstractClassMetadataExporterTest.php
@@ -324,7 +324,33 @@ public function testInversedByIsExported($class)
{
$this->assertEquals('user', $class->associationMappings['address']['inversedBy']);
}
-
+ /**
+ * @depends testExportDirectoryAndFilesAreCreated
+ */
+ public function testCascadeAllCollapsed()
+ {
+ $type = $this->_getType();
+ if ($type == 'xml') {
+ $xml = simplexml_load_file(__DIR__ . '/export/'.$type.'/Doctrine.Tests.ORM.Tools.Export.ExportedUser.dcm.xml');
+
+ $xml->registerXPathNamespace("d", "http://doctrine-project.org/schemas/orm/doctrine-mapping");
+ $nodes = $xml->xpath("/d:doctrine-mapping/d:entity/d:one-to-many[@field='interests']/d:cascade/d:*");
+ $this->assertEquals(1, count($nodes));
+
+ $this->assertEquals('cascade-all', $nodes[0]->getName());
+ } elseif ($type == 'yaml') {
+
+ $yaml = new \Symfony\Component\Yaml\Parser();
+ $value = $yaml->parse(file_get_contents(__DIR__ . '/export/'.$type.'/Doctrine.Tests.ORM.Tools.Export.ExportedUser.dcm.yml'));
+
+ $this->assertTrue(isset($value['Doctrine\Tests\ORM\Tools\Export\ExportedUser']['oneToMany']['interests']['cascade']));
+ $this->assertEquals(1, count($value['Doctrine\Tests\ORM\Tools\Export\ExportedUser']['oneToMany']['interests']['cascade']));
+ $this->assertEquals('all', $value['Doctrine\Tests\ORM\Tools\Export\ExportedUser']['oneToMany']['interests']['cascade'][0]);
+
+ } else {
+ $this->markTestSkipped('Test aviable only for '.$type.' dirver');
+ }
+ }
public function __destruct()
{
# $this->_deleteDirectory(__DIR__ . '/export/'.$this->_getType());
View
10 tests/Doctrine/Tests/ORM/Tools/Export/xml/Doctrine.Tests.ORM.Tools.Export.User.dcm.xml
@@ -35,6 +35,16 @@
</order-by>
</one-to-many>
+ <one-to-many field="interests" target-entity="Doctrine\Tests\ORM\Tools\Export\Interests" mapped-by="user" orphan-removal="true">
+ <cascade>
+ <cascade-refresh/>
+ <cascade-persist/>
+ <cascade-merge/>
+ <cascade-detach/>
+ <cascade-remove/>
+ </cascade>
+ </one-to-many>
+
<many-to-many field="groups" target-entity="Doctrine\Tests\ORM\Tools\Export\Group">
<cascade>
<cascade-all/>
View
5 tests/Doctrine/Tests/ORM/Tools/Export/yaml/Doctrine.Tests.ORM.Tools.Export.User.dcm.yml
@@ -34,6 +34,11 @@ Doctrine\Tests\ORM\Tools\Export\User:
number: ASC
cascade: [ persist, merge ]
orphanRemoval: true
+ interests:
+ targetEntity: Doctrine\Tests\ORM\Tools\Export\Interests
+ mappedBy: user
+ cascade: [ persist, merge, remove, refresh, detach ]
+ orphanRemoval: true
manyToMany:
groups:
targetEntity: Doctrine\Tests\ORM\Tools\Export\Group

0 comments on commit 0d4e062

Please sign in to comment.
Something went wrong with that request. Please try again.