2 namespace Doctrine\Tests\ORM\Functional\Ticket;
4 require_once __DIR__ . '/../../../TestInit.php';
6 class DDC599Test extends \Doctrine\Tests\OrmFunctionalTestCase
8 protected function setUp()
11 //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
13 $this->_schemaTool->createSchema(array(
14 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Item'),
15 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Subitem'),
16 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Child'),
18 } catch (\Exception $ignored) {}
21 public function testCascadeRemoveOnInheritanceHierachy()
23 $item = new DDC599Subitem;
25 $child = new DDC599Child;
26 $child->parent = $item;
27 $item->getChildren()->add($child);
28 $this->_em->persist($item);
29 $this->_em->persist($child);
33 $item = $this->_em->find(__NAMESPACE__ . '\DDC599Item', $item->id);
35 $this->_em->remove($item);
36 $this->_em->flush(); // Should not fail
38 $this->assertFalse($this->_em->contains($item));
39 $children = $item->getChildren();
40 $this->assertFalse($this->_em->contains($children[0]));
45 $item2 = new DDC599Subitem;
47 $this->_em->persist($item2);
50 $child2 = new DDC599Child;
51 $child2->parent = $item2;
52 $item2->getChildren()->add($child2);
53 $this->_em->persist($child2);
56 $this->_em->remove($item2);
57 $this->_em->flush(); // should not fail
59 $this->assertFalse($this->_em->contains($item));
60 $children = $item->getChildren();
61 $this->assertFalse($this->_em->contains($children[0]));
64 public function testCascadeRemoveOnChildren()
66 $class = $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Subitem');
68 $this->assertArrayHasKey('children', $class->associationMappings);
69 $this->assertTrue($class->associationMappings['children']['isCascadeRemove']);
75 * @InheritanceType("SINGLE_TABLE")
76 * @DiscriminatorColumn(name="type", type="integer")
77 * @DiscriminatorMap({"0" = "DDC599Item", "1" = "DDC599Subitem"})
83 * @Column(type="integer")
84 * @GeneratedValue(strategy="AUTO")
89 * @OneToMany(targetEntity="DDC599Child", mappedBy="parent", cascade={"remove"})
93 public function __construct()
95 $this->children = new \Doctrine\Common\Collections\ArrayCollection;
98 public function getChildren()
100 return $this->children;
107 class DDC599Subitem extends DDC599Item
110 * @Column(type="string")
122 * @Column(type="integer")
123 * @GeneratedValue(strategy="AUTO")
128 * @ManyToOne(targetEntity="DDC599Item", inversedBy="children")
129 * @JoinColumn(name="parentId", referencedColumnName="id")