我将自定义类型作为实体的主键(值对象作为实体的标识)。
例如,.use(collections({}))
.use(tags({}))
.use(permalinks({}))
.use(dateFormatter({}))
.use(markdown({}))
.use(helpers({}))
.use(layouts({}))
.use(rename({}))
实体有Type1
个VO,Type1Id
实体有Type2
个VO。
Type2Id
和Type1
映射到单个表,因此这两个类都继承自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;
}