我有一个要求,使用Doctrine来保存具有从应用程序配置中填充的预设值的实体。
有多个应用程序,共享相同的代码库,但配置不同。
我最初的想法是使用预持久侦听器,加载配置值并完成操作,但是问题是,即使配置文件更改了原始实体的配置需求,也不应在创建实体后更改这些属性。保持最初的状态。即使以某种形式加载实体并使用其他更改的值重新保存,这些特定的初始应用设置也应仅在实体创建时设置,并在整个生命周期中保持一开始的状态。
我知道,可以使用实体的设置器在实体上设置值,但是由于这些实体是在应用程序的各个位置创建的,所以我认为使用pre-persist钩子可以减少代码重复。
有没有一种方法可以检测一个实体是新创建的,还是可以使用的另一个侦听器?我浏览了文档,没有看到特定于对象创建的侦听器。
我认为也许是在第一次预持久化时,在首次创建并持久化对象时,某些实体属性(例如“创建的”)可能未设置在被调用的第一次预持久化时。
是否有一种方法可以实现我想做的事情,是否可以在实体创建时设置一些值,这些值在后续的持久化过程中是不变的?
答案 0 :(得分:1)
您的方法正确。当然,您可以使用文档中指出的prePersist
事件
https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/events.html#lifecycle-events
prePersist-在给定实体发生prePersist事件之前, 该实体的相应EntityManager持久操作为 被执行。请注意,此事件仅在 实体的初始持久性(即它不会在将来触发 更新)。
我还将向该实体添加一个约束,即不能用所需字段的空值保存您的实体。因此可以确保没有任何不一致之处。