Doctrine2,单表继承和自定义类型pk

时间:2016-08-18 19:38:17

标签: doctrine-orm

我将自定义类型作为实体的主键(值对象作为实体的标识)。 例如,.use(collections({})) .use(tags({})) .use(permalinks({})) .use(dateFormatter({})) .use(markdown({})) .use(helpers({})) .use(layouts({})) .use(rename({})) 实体有Type1个VO,Type1Id实体有Type2个VO。

Type2IdType1映射到单个表,因此这两个类都继承自Type2实体。

Attribute

那么,你如何看待,我在这里使用Domain\Model\Attribute\Attribute: type: entity id: id: column: id type: AttributeId table: attributes inheritanceType: SINGLE_TABLE discriminatorColumn: name: type type: integer discriminatorMap: 1: Domain\Model\Type1\Type1 2: Domain\Model\Type2\Type2 fields: name: type: string 类型,但我希望获得AttributeId Type1Id对象Type1 Type2Id Type2 )。

我尝试从方法public function convertToPHPValue($value, AbstractPlatform $platform)返回适当的对象,但我还没有找到如何检测源类。

有什么想法吗?

UPD:我的解决方案

使用loadClassMetadata事件我可以将所需的类型名称添加到fieldMappings['id']['type']

public function loadClassMetadata(\Doctrine\ORM\Event\LoadClassMetadataEventArgs $eventArgs)
{
    /** @var ClassMetadataInfo $classMetadata */
    $classMetadata = $eventArgs->getClassMetadata();
    if ($classMetadata->name != $classMetadata->rootEntityName && $classMetadata->rootEntityName === Attribute::class) {
        $pkType = $classMetadata->fieldMappings['id']['type'];
        $type = Type::getType($pkType);
        if ($type instanceof DoctrineSTITypeMapper) {
            $classMetadata->fieldMappings['id']['type'] = $type->mapEntityToType($classMetadata->name);
        }
    }

    return;
}

0 个答案:

没有答案