'msgraph' ?? 'subscription_events_expiration' OR (attributes->'msgraph' ?? 'subscription_events_expiration' AND (attributes->'msgraph'->>'subscription_events_expiration')::int < EXTRACT(EPOCH FROM (NOW() + :interval::interval))) LIMIT :limit OFFSET :offset ; SQL; private EntityManagerInterface $entityManager; public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } public function countByMostOldSubscriptionOrWithoutSubscriptionOrData(DateInterval $interval): int { $rsm = new ResultSetMapping(); $rsm->addScalarResult('c', 'c'); $sql = strtr(self::MOST_OLD_SUBSCRIPTION_OR_ANY_MS_GRAPH, [ '{select}' => 'COUNT(u) AS c', 'LIMIT :limit OFFSET :offset' => '', ]); return $this->entityManager->createNativeQuery($sql, $rsm)->setParameters([ 'interval' => $interval, ])->getSingleScalarResult(); } /** * @return array */ public function findByMostOldSubscriptionOrWithoutSubscriptionOrData(DateInterval $interval, int $limit = 50, int $offset = 0): array { $rsm = new ResultSetMappingBuilder($this->entityManager); $rsm->addRootEntityFromClassMetadata(User::class, 'u'); return $this->entityManager->createNativeQuery( strtr(self::MOST_OLD_SUBSCRIPTION_OR_ANY_MS_GRAPH, ['{select}' => $rsm->generateSelectClause()]), $rsm )->setParameters([ 'interval' => $interval, 'limit' => $limit, 'offset' => $offset, ])->getResult(); } }