1
0
mirror of synced 2025-02-03 22:09:26 +03:00

120 lines
3.4 KiB
PHP
Raw Normal View History

2017-03-04 15:09:29 +01:00
<?php
declare(strict_types=1);
2017-03-04 15:09:29 +01:00
namespace Doctrine\Tests\ORM\Functional\Ticket;
use Doctrine\ORM\Tools\ToolsException;
use Doctrine\Tests\OrmFunctionalTestCase;
2017-03-04 15:09:29 +01:00
/**
* @group #6303
2017-03-04 15:09:29 +01:00
*/
class DDC6303Test extends OrmFunctionalTestCase
2017-03-04 15:09:29 +01:00
{
public function setUp() : void
2017-03-04 15:09:29 +01:00
{
parent::setUp();
2017-03-11 20:37:32 +01:00
try {
$this->_schemaTool->createSchema([
$this->_em->getClassMetadata(DDC6303BaseClass::class),
$this->_em->getClassMetadata(DDC6303ChildA::class),
$this->_em->getClassMetadata(DDC6303ChildB::class),
]);
} catch (ToolsException $ignored) {
}
2017-03-04 15:09:29 +01:00
}
public function testMixedTypeHydratedCorrectlyInJoinedInheritance() : void
2017-03-04 15:09:29 +01:00
{
// DDC6303ChildA and DDC6303ChildB have an inheritance from DDC6303BaseClass,
// but one has a string originalData and the second has an array, since the fields
// are mapped differently
$this->assertHydratedEntitiesSameToPersistedOnes([
'a' => new DDC6303ChildA('a', 'authorized'),
'b' => new DDC6303ChildB('b', ['accepted', 'authorized']),
]);
2017-03-04 15:09:29 +01:00
}
2017-03-04 15:27:02 +01:00
public function testEmptyValuesInJoinedInheritance() : void
2017-03-04 15:27:02 +01:00
{
$this->assertHydratedEntitiesSameToPersistedOnes([
'stringEmpty' => new DDC6303ChildA('stringEmpty', ''),
'stringZero' => new DDC6303ChildA('stringZero', 0),
'arrayEmpty' => new DDC6303ChildB('arrayEmpty', []),
]);
}
2017-03-04 15:27:02 +01:00
/**
* @param DDC6303ChildA[]|DDC6303ChildB[] $persistedEntities indexed by identifier
*
* @throws \Doctrine\Common\Persistence\Mapping\MappingException
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
private function assertHydratedEntitiesSameToPersistedOnes(array $persistedEntities) : void
{
array_walk($persistedEntities, [$this->_em, 'persist']);
2017-03-04 15:27:02 +01:00
$this->_em->flush();
$this->_em->clear();
/* @var $entities DDC6303ChildA[]|DDC6303ChildB[] */
$entities = $this
->_em
->getRepository(DDC6303BaseClass::class)
->createQueryBuilder('p')
2017-03-04 15:27:02 +01:00
->where('p.id IN(:ids)')
->setParameter('ids', array_keys($persistedEntities))
->getQuery()->getResult();
self::assertCount(count($persistedEntities), $entities);
foreach ($entities as $entity) {
self::assertEquals($entity, $persistedEntities[$entity->id]);
2017-03-04 15:27:02 +01:00
}
}
2017-03-04 15:09:29 +01:00
}
2017-03-11 20:37:32 +01:00
/**
* @Entity
* @Table
2017-03-11 20:37:32 +01:00
* @InheritanceType("JOINED")
* @DiscriminatorColumn(name="discr", type="string")
* @DiscriminatorMap({
* DDC6303ChildA::class = DDC6303ChildA::class,
* DDC6303ChildB::class = DDC6303ChildB::class,
2017-03-11 20:37:32 +01:00
* })
*/
abstract class DDC6303BaseClass
2017-03-11 20:37:32 +01:00
{
/** @Id @Column(type="string") @GeneratedValue(strategy="NONE") */
2017-03-11 20:37:32 +01:00
public $id;
}
/** @Entity @Table */
class DDC6303ChildA extends DDC6303BaseClass
2017-03-11 20:37:32 +01:00
{
/** @Column(type="string", nullable=true) */
private $originalData;
public function __construct(string $id, $originalData)
{
$this->id = $id;
$this->originalData = $originalData;
}
2017-03-11 20:37:32 +01:00
}
/** @Entity @Table */
class DDC6303ChildB extends DDC6303BaseClass
2017-03-11 20:37:32 +01:00
{
/** @Column(type="simple_array", nullable=true) */
private $originalData;
public function __construct(string $id, array $originalData)
{
$this->id = $id;
$this->originalData = $originalData;
}
}