ImageRestaurantエンティティと 1 対 1 の関係を持つ Restaurant エンティティがあります。
1 つのフォームを使用して両方のエンティティを編集できます (ImageRestauranType は RestaurantType に埋め込まれています)。
Restaurantエンティティにはslugがあり、これはStofDoctrineExtensionsBundleのおかげで生成され、Gedmo\Sluggable アノテーションを使用しています。
Restaurantエンティティが更新され、slug属性が再生成されるたびに、 slug属性 (たとえば、 slug.jpg ) を使用して、 ImageRestaurantエンティティにリンクされているファイルの名前を変更しようとしています。ImageRestaurantエンティティのname属性も変更したいと考えています。
Doctrine イベントを使用する 2 つのオプションがあります。
- onFlush イベント:
更新予定のエンティティ ( Restaurant ) にアクセスできますが、現時点では、更新されたスラッグにはアクセスできません。そのため、ファイルとImageRestaurantエンティティを更新できません。
- postUpdate イベント:
更新されたスラッグにアクセスできますが、ドキュメントで説明されているように、このイベントはデータベースの永続性には関係ありません:
3 つの投稿イベントは、EntityManager#flush() 内で呼び出されます。ここでの変更はデータベースの永続性とは関係ありませんが、これらのイベントを使用して、マップされていないフィールド、ロギング、Doctrine によって直接マップされていない関連クラスなど、永続化できないアイテムを変更できます。
このイベントでは、エンティティ ID にアクセスできるので、エンティティRestaurant (新しく更新されたもの) とImageRestaurantの両方をデータベースから取得し、ファイルとImageRestaurant updateに進むことができると考えました。
これをどのように達成できるかについてのアイデアはありますか?