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 103 104 105 106 107 108
|
<?php
declare(strict_types=1);
namespace Doctrine\Tests\ORM\Functional\Ticket;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Id\AbstractIdGenerator;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\Persistence\Mapping\Driver\StaticPHPDriver;
use Doctrine\Tests\OrmFunctionalTestCase;
use PHPUnit\Framework\Attributes\Group;
use function md5;
#[Group('DDC-2415')]
class DDC2415Test extends OrmFunctionalTestCase
{
protected function setUp(): void
{
parent::setUp();
$this->_em->getConfiguration()->setMetadataDriverImpl(new StaticPHPDriver([]));
$this->createSchemaForModels(
DDC2415ParentEntity::class,
DDC2415ChildEntity::class,
);
}
public function testTicket(): void
{
$parentMetadata = $this->_em->getClassMetadata(DDC2415ParentEntity::class);
$childMetadata = $this->_em->getClassMetadata(DDC2415ChildEntity::class);
self::assertEquals($parentMetadata->generatorType, $childMetadata->generatorType);
self::assertEquals($parentMetadata->customGeneratorDefinition, $childMetadata->customGeneratorDefinition);
self::assertEquals(DDC2415Generator::class, $parentMetadata->customGeneratorDefinition['class']);
$e1 = new DDC2415ChildEntity('ChildEntity 1');
$e2 = new DDC2415ChildEntity('ChildEntity 2');
$this->_em->persist($e1);
$this->_em->persist($e2);
$this->_em->flush();
$this->_em->clear();
self::assertEquals(md5($e1->getName()), $e1->getId());
self::assertEquals(md5($e2->getName()), $e2->getId());
}
}
class DDC2415ParentEntity
{
/** @var string */
protected $id;
public function getId(): string
{
return $this->id;
}
public static function loadMetadata(ClassMetadata $metadata): void
{
$metadata->mapField(
[
'id' => true,
'fieldName' => 'id',
'type' => 'string',
],
);
$metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM);
$metadata->setCustomGeneratorDefinition(['class' => DDC2415Generator::class]);
$metadata->isMappedSuperclass = true;
}
}
class DDC2415ChildEntity extends DDC2415ParentEntity
{
public function __construct(protected string $name)
{
}
public function getName(): string
{
return $this->name;
}
public static function loadMetadata(ClassMetadata $metadata): void
{
$metadata->mapField(
[
'fieldName' => 'name',
'type' => 'string',
],
);
}
}
class DDC2415Generator extends AbstractIdGenerator
{
public function generateId(EntityManagerInterface $em, object|null $entity): string
{
return md5($entity->getName());
}
}
|