1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
<?php
declare(strict_types=1);
namespace Doctrine\Tests\ORM\Functional\Ticket;
use Doctrine\Tests\Models\DDC3699\DDC3699Child;
use Doctrine\Tests\Models\DDC3699\DDC3699RelationMany;
use Doctrine\Tests\Models\DDC3699\DDC3699RelationOne;
use Doctrine\Tests\OrmFunctionalTestCase;
use function assert;
/** @group DDC-3699 */
class DDC3699Test extends OrmFunctionalTestCase
{
protected function setUp(): void
{
$this->useModelSet('ddc3699');
parent::setUp();
}
/** @group DDC-3699 */
public function testMergingParentClassFieldsDoesNotStopMergingScalarFieldsForToOneUninitializedAssociations(): void
{
$id = 1;
$child = new DDC3699Child();
$child->id = $id;
$child->childField = 'childValue';
$child->parentField = 'parentValue';
$relation = new DDC3699RelationOne();
$relation->id = $id;
$relation->child = $child;
$child->oneRelation = $relation;
$this->_em->persist($relation);
$this->_em->persist($child);
$this->_em->flush();
$this->_em->clear();
$unManagedChild = $this->_em->find(DDC3699Child::class, $id);
assert($unManagedChild instanceof DDC3699Child);
$this->_em->detach($unManagedChild);
// make it managed again
$this->_em->find(DDC3699Child::class, $id);
$unManagedChild->childField = 'modifiedChildValue';
$unManagedChild->parentField = 'modifiedParentValue';
$mergedChild = $this->_em->merge($unManagedChild);
assert($mergedChild instanceof DDC3699Child);
self::assertSame($mergedChild->childField, 'modifiedChildValue');
self::assertSame($mergedChild->parentField, 'modifiedParentValue');
}
/** @group DDC-3699 */
public function testMergingParentClassFieldsDoesNotStopMergingScalarFieldsForToManyUninitializedAssociations(): void
{
$id = 2;
$child = new DDC3699Child();
$child->id = $id;
$child->childField = 'childValue';
$child->parentField = 'parentValue';
$relation = new DDC3699RelationMany();
$relation->id = $id;
$relation->child = $child;
$child->relations[] = $relation;
$this->_em->persist($relation);
$this->_em->persist($child);
$this->_em->flush();
$this->_em->clear();
$unmanagedChild = $this->_em->find(DDC3699Child::class, $id);
assert($unmanagedChild instanceof DDC3699Child);
$this->_em->detach($unmanagedChild);
// make it managed again
$this->_em->find(DDC3699Child::class, $id);
$unmanagedChild->childField = 'modifiedChildValue';
$unmanagedChild->parentField = 'modifiedParentValue';
$mergedChild = $this->_em->merge($unmanagedChild);
assert($mergedChild instanceof DDC3699Child);
self::assertSame($mergedChild->childField, 'modifiedChildValue');
self::assertSame($mergedChild->parentField, 'modifiedParentValue');
}
}
|