Вы должны понять, что Доктрина делает для вас.ORM не являются создателями простых запросов.Они отображают состояние вашей базы данных на объекты в памяти, которые ваш код понимает и может работать с ними.
Итак, когда вы передаете форму, как вы делали, доктрина запрашивает объект и обновляет значения всостояние объектов.Таким образом, после обработки формы ваш объект уже имеет другое состояние, чем состояние в базе данных.Единственное, что осталось сделать для доктрины - это сохранить и сбросить, или, другими словами, зарегистрировать, что изменение состояния будет отражено в базе данных (сохраниться), и фактически изменить значения в БД (очистить).
Есливы запрашиваете объект, который является «управляемым» (имеется в виду, что он уже был запрошен и находится в памяти доктрины), тогда доктрина выдаст вам объект в памяти, ради эффективности.Он не будет запрашивать БД для этого снова.Вы можете вызвать метод обновления в диспетчере для обновления состояния объекта из базы данных, но это будет означать потерю состояния, которое еще не было сохранено, например, данные, поступающие из вашей формы.
В этом случае я бы порекомендовал либо создать событие формы, которое будет сравнивать значение, которое пользователь написал, со значением вашей системы.Событие формы должно быть preSetData
, поскольку вы хотите провести сравнение до того, как ваша сущность будет обновлена новыми данными.Вы можете проверить больше здесь здесь
Другой альтернативой является создание пользовательского ограничения проверки.Если ваше системное значение является фиксированным, вы можете проверить его с помощью специального валидатора.Или даже с обычными сравнительными ограничениями .
Надеюсь, эта информация поможет!