Делаю фильтрацию каталога. В нем много параметров для фильтрации, упрощенно строка выглядит примерно так
/?isStock@bool=1&year@range=2015|2019&year@sort=>&color@array=красный|синий&brand@array=bmw|honda
я придумал себе алгоритм для это строки, может это конечно не очень - до чего додумался, пытался искать другие варианты, только эластиксерч подошел по параметрам, но это избыточно для моего проекта
я сделал базовый класс Параметра и расширил базовый класс специфическими 
типами в которых строится запрос
типа 
Simple, 
Bool, 
Range (плюс еще сортировка и значение для пейджинга)
каждый тип сам строит запрос, например это метод 
Range типа
public function buildQuery(QueryBuilder $qb): QueryBuilder
    {
        [$normalizedKey] = $this->getKeys($qb); //значение вместе с алиасом
        if ($this->getFrom()) {
            $qb->andWhere($qb->expr()->andX(
                $qb->expr()->gte($normalizedKey, $this->getFrom())
            ));
        }
        if ($this->getTo()) {
            $qb->andWhere($qb->expr()->andX(
                $qb->expr()->lte($normalizedKey, $this->getTo())
            ));
        }
        return $qb;
    }
все прекрасно работает, но проблема в том что есть ОБЯЗАТЕЛЬНЫЕ параметры(тот же 
Range) -
то есть должно соблюдаться условие 
AND
Но у типа 
Array  другое условие например color@array=красный|синий, то есть в результатх с обязательными параметрами нужно найти какой то из множества, или красный или синий
Я построил такой запрос и он работает 
public function buildQuery(QueryBuilder $qb): QueryBuilder
    {
        [$normalizedKey, $key] = $this->getKeys($qb);
        $values = $this->getValue();
        $qb->andWhere($normalizedKey . ' IN (:values)')->setParameter('values', $values, Connection::PARAM_STR_ARRAY);
        return $qb;
    }
 НО, если таких фильтров несколько - все рушится, условие не подходит, не пойму почему, глову уже сломал
есть вариант фильтровать уже на фронте с помощью js
Подскажите пожалуйста есть ли какие то варианты
на всякий случай приложу дамп DQL 
"SELECT c FROM App\Entity\Car c WHERE c.isStock = :isStock AND c.year >= 2015 AND c.year <= 2019 AND c.color IN (:values) AND c.brand IN (:values)"