我有一个与ImageRestaurant实体具有一对一关系的餐厅实体。
我可以使用一个表单来编辑这两个实体(ImageRestauranType 嵌入在 RestaurantType 中)。
Restaurant实体有一个slug,它是由StofDoctrineExtensionsBundle生成的,并使用 Gedmo\Sluggable 注释。
每次更新Restaurant实体并重新生成slug属性时,我都尝试使用slug属性(例如slug.jpg )重命名链接到我的ImageRestaurant实体的文件。我还想更改ImageRestaurant实体的名称属性。
我有两个使用 Doctrine 事件的选项:
- onFlush 事件:
我可以访问计划更新的实体(Restaurant),但此时无法访问更新的 slug。所以我无法更新文件和ImageRestaurant实体。
- 更新后事件:
我可以访问更新的slug,但如文档中所述,此事件与数据库中的持久性无关:
这三个发布事件在 EntityManager#flush() 中调用。此处的更改与数据库中的持久性无关,但您可以使用这些事件来更改非持久性项目,例如非映射字段、日志记录,甚至是未由 Doctrine 直接映射的关联类。
对于这个事件,由于我可以访问实体 ID,我认为我可以从数据库中获取实体餐厅(新更新的实体)和ImageRestaurant并继续进行文件和ImageRestaurant更新?
关于如何实现这一目标的任何想法?