createQueryBuilder('option'); $qb->where('option.key = :key'); if (true === $active) { $qb->andWhere('option.active = true'); } if (false === $includeParents) { $qb->andWhere('option.parent IS NOT NULL'); if (true === $active) { $qb->join('option.parent', 'p'); $qb->andWhere('p.active = true'); } } $qb->setParameter('key', $key); return $qb->getQuery()->getResult(); } /** * @return string[] */ public function getKeys() { $keys = $this->createQueryBuilder('option') ->select('option.key') ->distinct() ->getQuery() ->getScalarResult(); return array_map(static fn ($r) => $r['key'], $keys); } }