Skip to content

Instantly share code, notes, and snippets.

@doctrinebot
Created December 13, 2015 18:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save doctrinebot/e6884ff3bf41ef83a5a5 to your computer and use it in GitHub Desktop.
Save doctrinebot/e6884ff3bf41ef83a5a5 to your computer and use it in GitHub Desktop.
Attachments to Doctrine Jira Issue DDC-599 - https://github.com/doctrine/doctrine2/issues/5105
<?php
namespace Doctrine\Tests\ORM\Functional\Ticket;
require_once __DIR__ . '/../../../TestInit.php';
class DDC599Test extends \Doctrine\Tests\OrmFunctionalTestCase
{
protected function setUp()
{
parent::setUp();
try {
$this->_schemaTool->createSchema(array(
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Subitem'),
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Item'),
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Child'),
));
} catch(\Exception $e) {
}
}
public function testCascadeRemoveOnInheritanceHierachy()
{
$item = new DDC599Subitem;
$item->elem = "foo";
$child = new DDC599Child;
$child->parent = $item;
$item->getChildren()->add($child);
$this->_em->persist($item);
$this->_em->persist($child);
$this->_em->flush();
$this->_em->clear();
$item = $this->_em->find(__NAMESPACE__ . '\DDC599Item', $item->id);
$this->_em->remove($item);
$this->_em->flush(); // Crashes
}
public function testCascadeRemoveOnChildren()
{
$class = $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Subitem');
$this->assertArrayHasKey('children', $class->associationMappings);
$this->assertTrue($class->associationMappings['children']->isCascadeRemove);
}
}
/**
* @Entity
* @InheritanceType("SINGLE_TABLE")
* @DiscriminatorColumn(name="type", type="integer")
* @DiscriminatorMap({"0" = "DDC599Item", "1" = "DDC599Subitem"})
*/
class DDC599Item
{
/**
* @Id
* @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @OneToMany(targetEntity="DDC599Child", mappedBy="parent", cascade={"remove"})
*/
protected $children;
public function __construct()
{
$this->children = new \Doctrine\Common\Collections\ArrayCollection;
}
public function getChildren()
{
return $this->children;
}
}
/**
* @Entity
*/
class DDC599Subitem extends DDC599Item
{
/**
* @Column(type="string")
*/
public $elem;
}
/**
* @Entity
*/
class DDC599Child
{
/**
* @Id
* @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @ManyToOne(targetEntity="DDC599Item", inversedBy="children")
* @JoinColumn(name="parentId", referencedColumnName="id")
*/
public $parent;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment