/** * @param PublishedMessage $mostRecentPublishedMessage * @throws InvalidPublishedMessageToTrack There can only be one last * published message for exchange this exception's thrown if 2 are found */ public function track(PublishedMessage $mostRecentPublishedMessage) { $builder = $this->createQueryBuilder('p'); $builder->andWhere('p.exchangeName = :exchangeName')->setParameter('exchangeName', $mostRecentPublishedMessage->exchangeName()); $currentMessage = $builder->getQuery()->getOneOrNullResult(); if ($currentMessage && !$currentMessage->equals($mostRecentPublishedMessage)) { throw new InvalidPublishedMessageToTrack(); } $this->_em->persist($mostRecentPublishedMessage); $this->_em->flush($mostRecentPublishedMessage); }