123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- <?php
- namespace Doctrine\Tests\ORM\Functional\Ticket;
-
- require_once __DIR__ . '/../../../TestInit.php';
-
- class DDC599Test extends \Doctrine\Tests\OrmFunctionalTestCase
- {
- protected function setUp()
- {
- parent::setUp();
- //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
- try {
- $this->_schemaTool->createSchema(array(
- $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Item'),
- $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Subitem'),
- $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC599Child'),
- ));
- } catch (\Exception $ignored) {}
- }
-
- 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(); // Should not fail
-
- $this->assertFalse($this->_em->contains($item));
- $children = $item->getChildren();
- $this->assertFalse($this->_em->contains($children[0]));
-
- $this->_em->clear();
-
-
- $item2 = new DDC599Subitem;
- $item2->elem = "bar";
- $this->_em->persist($item2);
- $this->_em->flush();
-
- $child2 = new DDC599Child;
- $child2->parent = $item2;
- $item2->getChildren()->add($child2);
- $this->_em->persist($child2);
- $this->_em->flush();
-
- $this->_em->remove($item2);
- $this->_em->flush(); // should not fail
-
- $this->assertFalse($this->_em->contains($item));
- $children = $item->getChildren();
- $this->assertFalse($this->_em->contains($children[0]));
- }
-
- 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;
- }
|