У меня есть требование использовать Doctrine для сохранения объекта с предустановленными значениями, которые заполняются из конфигурации приложения.
Есть несколько приложений, использующих одну и ту же кодовую базу, с разными конфигурациями.
Моя первоначальная идея заключалась в том, чтобы использовать pre-persist listener, загрузить значения конфигурации и все готово, но проблема в том, что эти атрибуты НЕ должны изменяться после создания объекта, даже если файл конфигурации изменяет исходную конфигурацию объекта, чтобы оставаться в том виде, в котором они были изначально. Даже если объект загружен в форму и повторно сохранен с измененными другими значениями, эти конкретные начальные настройки приложения должны быть установлены только при создании объекта и сохранены в течение всего жизненного цикла объекта, как они были в начале.
Я понимаю, что можно установить значения в сущности с помощью установщиков сущности, но поскольку эти сущности создаются в разных местах приложения, я думал, что использование хука pre-persist уменьшит дублирование кода.
Есть ли способ определить, создан ли объект заново или другой слушатель, который я мог бы использовать? Я бегло просмотрел документацию и не увидел слушателей, специфичных для создания объекта.
Я подумал, что, возможно, при первом предварительном сохранении некоторые атрибуты сущности, такие как «создано», возможно, не установлены при первом вызове предварительного сохранения, когда объект создается и сохраняется в первый раз.
Есть ли способ достичь того, что я пытаюсь сделать, какой-то способ установить значения при создании объекта, которые не меняются при последующих сохранениях?




Вы на правильном пути. Конечно, вы можете использовать событие prePersist, как указано в документации.
https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/events.html#lifecycle-events
prePersist - The prePersist event occurs for a given entity before the respective EntityManager persist operation for that entity is executed. It should be noted that this event is only triggered on initial persist of an entity (i.e. it does not trigger on future updates).
Я бы также добавил ограничение к объекту, что сохранение объекта с пустым значением для желаемых полей невозможно. Таким образом гарантируется отсутствие противоречий.
pre-persist звуки должны быть событием, которое вы ищете; срабатывает только при начальной вставке. doctrine-project.org/projects/doctrine-orm/en/latest/referen ce /…: «... Следует отметить, что это событие запускается только при первоначальном сохранении объекта (т.е. оно не запускается при будущих обновлениях)».