Мой домен имеет родительский класс 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
в базе данных, когдаЯ пытаюсь получить сообщения об инцидентах. Я получаю следующую ошибку:
TypeError: Argument 1 passed to Domain\Model\File\FileId::__construct() must be of the type string, null given
(FileId
- это объект-значение, представляющий идентификатор объекта File)
IncidenceMessageImage
имеет File
поле, которое является внешним ключом и является обязательным.
Мне не имеет смысла, что Doctrine выбирает File
, когда IncidenceMessageText
не имеет этого поля.
Во время отладкиЯ обнаружил, что доктрина выполняет SELECT с левыми соединениями для каждой таблицы IncidenceMessage
, и это вызывает мой метод FileTypeId::convertToPHPValue
:
class FileIdType extends Type
{
public function convertToDatabaseValue($value, AbstractPlatform $platform)
{
return new FileId($value);
}
}
AFAIK, проблема в том, что дочерние классы имеют обязательные поля, ноне должно быть пробкой, верно?