我的域有一个父IncidenceMessage
类和几个子类(即IncidenceMessageText
)。我有以下类表继承配置:
Domain\Model\IncidenceMessage\IncidenceMessage:
type: entity
repositoryClass: Infrastructure\Domain\Model\IncidenceMessage\DoctrineIncidenceMessageRepository
table: incidence_messages
inheritanceType: JOINED
discriminatorColumn:
name: type
type: string
length: 30
discriminatorMap:
text: IncidenceMessageText
image: IncidenceMessageImage
audio: IncidenceMessageAudio
video: IncidenceMessageVideo
fields:
...
我可以正确创建任何IncidenceMessage
实体。
只有一个IncidenceMessageText
in 数据库,当我尝试获取事件消息时,我收到以下错误:
TypeError: Argument 1 passed to Domain\Model\File\FileId::__construct() must be of the type string, null given
(FileId
是一个值对象,表示 File 实体的 id)
IncidenceMessageImage
有File
一个外键字段,它是必需的。
File
Doctrine在IncidenceMessageText
没有该字段时获取对我来说毫无意义。
在调试时,我发现教义对每个IncidenceMessage
表都使用 LEFT JOIN 进行 SELECT,这调用了我的FileTypeId::convertToPHPValue
方法:
class FileIdType extends Type
{
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return new FileId($value);
}
}
AFAIK,这里的问题是子类有必填字段,但这不应该是一个障碍,对吧?