Фильтрация по большому количеству параметров 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);
}
}