/** * Evaluate * * @param Environment $env */ public function evaluate(EnvironmentInterface $env) { $qb = $env->queryBuilder; $paramName = $env->newParamName(); $paramValue = $env->newParamName(); $paramContent = $env->newParamName(); $paramVs = $env->newParamName(); $paramValues = $env->newParamName(); $paramAttribute = $env->newParamName(); $paramAddress = $env->newParamName(); $subQuery = $env->cloneQueryBuilder(); $rootAliases = $subQuery->getRootAliases(); $subQuery->innerJoin($rootAliases[0] . '.valueSet', $paramVs)->innerJoin($paramVs . '.values', $paramValues)->innerJoin($paramValues . '.attribute', $paramAttribute)->innerJoin($paramValues . '.address', $paramAddress)->andWhere($paramAttribute . '.name = :' . $paramName); switch ($this->operator) { case 'equals': $subQuery->andWhere($paramAddress . '.city = :' . $paramValue); $qb->setParameter($paramValue, $this->getRight()->getValue()); break; case 'notequals': $subQuery->andWhere($paramAddress . '.city <> :' . $paramValue); $qb->setParameter($paramValue, $this->getRight()->getValue()); break; case 'contains': $subQuery->andWhere($paramAddress . '.city LIKE :' . $paramValue); $qb->setParameter($paramValue, '%' . $this->getRight()->getValue() . '%'); break; } $qb->andWhere($qb->expr()->in('a', $subQuery->getDQL()))->setParameter($paramName, $this->getAttribute()); }
/** * Evaluate * * @param Environment $env */ public function evaluate(EnvironmentInterface $env) { $qb = $env->queryBuilder; $paramName = $env->newParamName(); $paramValue = $env->newParamName(); $paramVs = $env->newParamName(); $paramValues = $env->newParamName(); $paramAttribute = $env->newParamName(); $paramOption = $env->newParamName(); $subQuery = $env->cloneQueryBuilder(); $rootAliases = $subQuery->getRootAliases(); $subQuery->innerJoin($rootAliases[0] . '.valueSet', $paramVs)->innerJoin($paramVs . '.values', $paramValues)->innerJoin($paramValues . '.attribute', $paramAttribute)->innerJoin($paramValues . '.options', $paramOption)->andWhere($paramAttribute . '.name = :' . $paramName); $subQuery->andWhere($paramOption . '.id IN (:' . $paramValue . ')'); $qb->setParameter($paramValue, $this->getRight()->getValue()); switch ($this->operator) { case 'in': $qb->andWhere($qb->expr()->in('a', $subQuery->getDQL())); break; case 'notin': $qb->andWhere($qb->expr()->notin('a', $subQuery->getDQL())); break; } $qb->setParameter($paramName, $this->getAttribute()); }