Symfony 带必填字段的条令类表继承查询
我的域有一个父类Symfony 带必填字段的条令类表继承查询,symfony,doctrine,discriminator,class-table-inheritance,Symfony,Doctrine,Discriminator,Class Table Inheritance,我的域有一个父类IncidenceMessage类和几个子类(即incidencemessageext)。 我有以下类表继承配置: Domain\Model\IncidenceMessage\IncidenceMessage: type: entity repositoryClass: Infrastructure\Domain\Model\IncidenceMessage\DoctrineIncidenceMessageRepository table: inciden
IncidenceMessage
类和几个子类(即incidencemessageext
)。
我有以下类表继承配置:
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
,当我尝试获取关联消息时,我得到以下错误:
TypeError: Argument 1 passed to Domain\Model\File\FileId::__construct() must be of the type string, null given
(FileId
是表示文件实体id的值对象)
IncidenceMessageImage
有一个作为外键的文件
字段,它是必需的
当IncidenceMessageText
没有该字段时,条令获取文件
对我来说毫无意义
在调试过程中,我发现条令对每个IncidenceMessage
表都使用左连接进行选择,这将调用我的FileTypeId::convertToPHPValue
方法:
class FileIdType extends Type
{
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return new FileId($value);
}
}
好吧,这里的问题是子类有必填字段,但这不应该是一个障碍,对吧?我找到了一个可能的解决方法。在自定义DBAL类型
FileIdType
上,我在实例化FileId
之前检查了该值是否为null:
use Doctrine\DBAL\Types\Type;
class FileIdType extends Type
{
public function convertToPHPValue($value, AbstractPlatform $platform)
{
return $value ? new FileId($value) : null;
}
}
条令本身从不使用类的构造函数。所有操作都是使用反射来直接访问类属性的。您的代码正在某处运行new FileId()。@Cerad实际上,new FileId()是自定义DBAL类型(方法convertToPHPValue),但我不明白调用它的原因。