2121use  Zenstruck \Foundry \FactoryCollection ;
2222use  Zenstruck \Foundry \Object \Hydrator ;
2323use  Zenstruck \Foundry \ObjectFactory ;
24+ use  Zenstruck \Foundry \Persistence \Event \AfterPersist ;
2425use  Zenstruck \Foundry \Persistence \Exception \NotEnoughObjects ;
2526use  Zenstruck \Foundry \Persistence \Exception \RefreshObjectFailed ;
2627use  Zenstruck \Foundry \Persistence \Relationship \ManyToOneRelationship ;
@@ -514,10 +515,13 @@ protected function normalizeObject(string $field, object $object): object
514515        }
515516    }
516517
518+     /** 
519+      * @internal 
520+      */ 
517521    final  protected  function  initializeInternal (): static 
518522    {
519523        // Schedule any new object for insert right after instantiation 
520-         return  parent ::initializeInternal ()
524+         $ factory  =  parent ::initializeInternal ()
521525            ->afterInstantiate (
522526                static  function (object   $ object , array  $ parameters , PersistentObjectFactory   $ factoryUsed ): void  {
523527                    if  (!$ factoryUsed ->isPersisting ()) {
@@ -544,6 +548,20 @@ static function(object $object, array $parameters, PersistentObjectFactory $fact
544548                }
545549            )
546550        ;
551+ 
552+         if  (!Configuration::isBooted () || !Configuration::instance ()->hasEventDispatcher ()) {
553+             return  $ factory ;
554+         }
555+ 
556+         return  $ factory ->afterPersist (
557+             static  function (object   $ object , array  $ parameters , self   $ factoryUsed ): bool  {
558+                 Configuration::instance ()->eventDispatcher ()->dispatch (
559+                     new  AfterPersist ($ object , $ parameters , $ factoryUsed )
560+                 );
561+ 
562+                 return  false ; // don't perform a flush after the hook 
563+             }
564+         );
547565    }
548566
549567    private  function  throwIfCannotCreateObject (): void 
0 commit comments