diff --git a/src/EventListener/SearchIndexerSubscriber.php b/src/EventListener/SearchIndexerSubscriber.php index 9cd2b92..51168c4 100644 --- a/src/EventListener/SearchIndexerSubscriber.php +++ b/src/EventListener/SearchIndexerSubscriber.php @@ -3,43 +3,46 @@ namespace Algolia\SearchBundle\EventListener; use Algolia\SearchBundle\SearchService; +use Doctrine\ORM\Event\PostFlushEventArgs; use Doctrine\ORM\Event\PostPersistEventArgs; use Doctrine\ORM\Event\PostUpdateEventArgs; use Doctrine\ORM\Event\PreRemoveEventArgs; class SearchIndexerSubscriber { - /** - * @var SearchService - */ - private $searchService; + private array $objectsToIndex = []; + private array $objectsToRemove = []; - public function __construct(SearchService $searchService) + public function __construct( + private readonly SearchService $searchService, + ) { + } + + public function postPersist(PostPersistEventArgs $args): void { - $this->searchService = $searchService; + $this->objectsToIndex[] = $args->getObject(); } - /** - * @return void - */ - public function postPersist(PostPersistEventArgs $args) + public function postUpdate(PostUpdateEventArgs $args): void { - $this->searchService->index($args->getObjectManager(), $args->getObject()); + $this->objectsToIndex[] = $args->getObject(); } - /** - * @return void - */ - public function postUpdate(PostUpdateEventArgs $args) + public function preRemove(PreRemoveEventArgs $args): void { - $this->searchService->index($args->getObjectManager(), $args->getObject()); + $this->objectsToRemove[] = $args->getObject(); } - /** - * @return void - */ - public function preRemove(PreRemoveEventArgs $args) + public function postFlush(PostFlushEventArgs $args): void { - $this->searchService->remove($args->getObjectManager(), $object = $args->getObject()); + foreach ($this->objectsToIndex as $object) { + $this->searchService->index($args->getObjectManager(), $object); + } + $this->objectsToIndex = []; + + foreach ($this->objectsToRemove as $object) { + $this->searchService->remove($args->getObjectManager(), $object); + } + $this->objectsToRemove = []; } }