diff --git a/src/Mcfedr/QueueManagerBundle/Command/DoctrineDelayRunnerCommand.php b/src/Mcfedr/QueueManagerBundle/Command/DoctrineDelayRunnerCommand.php index d29f13c..e190637 100644 --- a/src/Mcfedr/QueueManagerBundle/Command/DoctrineDelayRunnerCommand.php +++ b/src/Mcfedr/QueueManagerBundle/Command/DoctrineDelayRunnerCommand.php @@ -49,11 +49,27 @@ protected function getJobs(): ?JobBatch { $now = new Carbon(null, new \DateTimeZone('UTC')); $em = $this->getEntityManager(); + $connection = $em->getConnection(); try { $em->getConnection()->beginTransaction(); $repo = $em->getRepository(DoctrineDelayJob::class); - $orderDir = $this->reverse ? 'DESC' : 'ASC'; + $query = $repo->createQueryBuilder('job') + ->andWhere('job.time < :now') + ->setParameter('now', $now, Type::DATETIME) + ->orderBy('job.time', $this->reverse ? 'DESC' : 'ASC') + ->setMaxResults($this->batchSize) + ->getQuery() + ->getResult() + ; + + $result = $connection->executeQuery( + $query->getSQL().' '.$connection->getDatabasePlatform()->getWriteLockSQL(), + $query->getParameters()->toArray() + )->fetch(); + + + $orderDir = ; $em->getConnection()->executeUpdate( "UPDATE DoctrineDelayJob job SET job.processing = TRUE WHERE job.time < :now ORDER BY job.time {$orderDir} LIMIT :limit",