Доктрина создает сущности при помощи рeфлексии, в обход конструктора и сеттеров.
С помощью
десериализации. (UPD: см. комменты, уже не актуально)
Видимо предполагается, что состояние, хранящееся в БД, всегда валидно. Но так бывает не всегда.
Это ваша задача этого не допускать. Если вы это допустили, ошибки Doctrine - это меньшее, что может вылезти.
Например, в БД есть nullable поле `name`, которое в сущности не должно быть nullable
Ну так может быть стоит привести схему и сущность с маппингом в соответствие друг другу, а не отстреливать симптомы?
public function getName(): string
и если в БД руками проставить null, то ошибка возникает только при запросе этого геттера.
Решается это так:
public function getName(): ?string
Я сначала было хотел вам предложить валидировать данные на входе в сущность (конструктор), но потом читая ваш вопрос дальше, понял, что вы вообще используете Doctrine очень странно и ждёте, что сама Doctrine будет вам предоставлять средства для ухода от возникающих проблем.
Первое и самое важное: Doctrine - это Data Mapper. Если у вас маппинг и сущность не соответствуют схеме - работать ничего нормально не будет. Лечите заболевание, а не симптомы.