Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 121 additions & 0 deletions tests/Doctrine/Tests/ORM/Functional/Ticket/GH9376Test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
<?php

declare(strict_types=1);

namespace Doctrine\Tests\ORM\Functional\Ticket;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\GeneratedValue;
use Doctrine\ORM\Mapping\Id;
use Doctrine\Tests\OrmFunctionalTestCase;

class GH9376Test extends OrmFunctionalTestCase
{
protected function setUp(): void
{
parent::setUp();

$this->createSchemaForModels(
GH9376GiftVariant::class,
GH9376Product::class,
GH9376Gift::class
);
}

public function testRemoveCircularRelatedEntities(): void
{
if (! $this->_em->getConnection()->getDatabasePlatform()->supportsForeignKeyConstraints()) {
self::markTestSkipped('Platform does not support foreign keys.');
}

$product = new GH9376Product();
$gift = new GH9376Gift($product);
$giftVariant = new GH9376GiftVariant($gift);

$this->_em->persist($product);
$this->_em->persist($gift);
$this->_em->persist($giftVariant);
$this->_em->flush();
$this->_em->clear();

$persistedGiftVariant = $this->_em->find(GH9376GiftVariant::class, 1);
$this->_em->remove($persistedGiftVariant);

$persistedGift = $this->_em->find(GH9376Gift::class, 1);
$this->_em->remove($persistedGift);

$this->_em->flush();
$this->_em->clear();

self::assertEmpty($this->_em->getRepository(GH9376Gift::class)->findAll());
self::assertEmpty($this->_em->getRepository(GH9376GiftVariant::class)->findAll());
}
}

/**
* @Entity
*/
class GH9376GiftVariant
{
/**
* @var int
* @Id
* @Column(type="integer")
* @GeneratedValue
*/
public $id;

/**
* @ORM\ManyToOne(targetEntity=GH9376Gift::class)
* @ORM\JoinColumn(nullable=false)
*
* @var GH9376Gift
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The variant points to the gift and nothing else

*/
public $gift;

public function __construct(GH9376Gift $gift)
{
$this->gift = $gift;
}
}

/**
* @Entity
*/
class GH9376Product
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The product points to nothing

{
/**
* @var int
* @Id @Column(type="integer")
* @GeneratedValue
*/
public $id;
}

/**
* @Entity
*/
class GH9376Gift
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The gif points to a product and nothing else.

So the graph is like Variant -> Gift -> Product

🤔 where is the circular reference?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👀

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

{
/**
* @var int
* @Id @Column(type="integer")
* @GeneratedValue
*/
public $id;

/**
* @ORM\ManyToOne(targetEntity=GH9376Product::class)
* @ORM\JoinColumn(nullable=false)
*
* @var GH9376Product
*/
public $product;

public function __construct(GH9376Product $product)
{
$this->product = $product;
}
}