Фильтрация по большому количеству параметров QueryBuilder, какие есть варианты?

Всем привет, имеем "супер сущность" в приложении с которой все связано - CoreEntity и её CoreEntityRepository, в котором есть метод на получение этой сущности с большим количеством параметров и innerJoin, leftJoin и большим количеством if(isset($option['nameOption]),

Есть ли какой то паттерн для избавления от этого, или какие то идеи?

public function findCoreEntity(array $options): array
{
 /** @var EntityRepository $repository */
        $repository = $this->entityManager->getRepository(CoreEntity::class);
        $queryBuilder = $repository->createQueryBuilder('c, 'c.id')
            ->innerJoin('c.firstEntity', 'f')
            ->innerJoin('c.secondEntity', 's')
            ->where('1 = 1');

        if (!empty($options['firstEntityID'])) {
            $queryBuilder->andWhere('f.id = :FIRST_ID')
                ->setParameter(':FIRST_ID', $options['firstEntityID']);
        }

       if (!empty($options['N+1EntityOption'])) {
            $queryBuilder->andWhere('n+1.id  IB (:N+1EntityOption)' )
                ->setParameter(':N+1EntityOption'', $options['N+1EntityOption'']);
        }

      if (PRICE::FILTER_PRICE_TYPE) {
            $queryBuilder
                ->innerJoin('c.prices', 'pp' , 'WITH', 'pp.type = :PRICE_TYPE')
                ->setParameter(':PRICE_TYPE', $type);

      }
}

Ответы (0 шт):