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