/** * {@inheritdoc} */ public function addFieldFilter($field, $operator, $value) { $field = sprintf('%s.%s', ProductQueryUtility::NORMALIZED_FIELD, $field); switch ($operator) { case 'BETWEEN': $this->qb->field($field)->gte($this->getTimestamp($value[0])); $this->qb->field($field)->lte($this->getTimestamp($value[1], true)); break; case '>': $this->qb->field($field)->gt($this->getTimestamp($value, true)); break; case '<': $this->qb->field($field)->lt($this->getTimestamp($value)); break; case '=': $this->qb->field($field)->gte($this->getTimestamp($value)); $this->qb->field($field)->lte($this->getTimestamp($value, true)); break; case 'EMPTY': $this->qb->field($field)->exists(false); break; default: $this->qb->addAnd($this->qb->expr()->addOr($this->qb->expr()->field($field)->lte($this->getTimestamp($value['from'])))->addOr($this->qb->expr()->field($field)->gte($this->getTimestamp($value['to'], true)))); } return $this; }
function it_adds_a_filter_with_codes_to_the_query($attrValidatorHelper, $idResolver, Builder $qb, AttributeInterface $attribute, Expr $expr) { $attrValidatorHelper->validateLocale($attribute, Argument::any())->shouldBeCalled(); $attrValidatorHelper->validateScope($attribute, Argument::any())->shouldBeCalled(); $attribute->getId()->willReturn(42); $attribute->isLocalizable()->willReturn(false); $attribute->isScopable()->willReturn(false); $attribute->getBackendType()->willReturn('reference_data_option'); $attribute->getCode()->willReturn('color'); $attribute->getReferenceDataName()->willReturn('ref_data_color'); $idResolver->resolve('ref_data_color', ['red', 'blue'])->willReturn([118, 270]); $qb->expr()->willReturn($expr); $expr->field('normalizedData.color.id')->shouldBeCalled()->willReturn($expr); $expr->in([118, 270])->shouldBeCalled()->willReturn($expr); $qb->addAnd($expr)->shouldBeCalled(); $this->addAttributeFilter($attribute, 'IN', ['red', 'blue'], null, null, ['field' => 'color.code']); }
/** * {@inheritdoc} */ public function andWhere($where) { $this->queryBuilder->addAnd($where); return $this; }
/** * Add conditions according to given filters. * * @param Builder $builder * @param array $locales * @param array $filters */ protected function addTranslationFilter(Builder $builder, array $locales = null, array $filters = null) { if (null != $locales) { $qb = $this->createQueryBuilder()->hydrate(false)->distinct('id')->field('translations.locale')->in($locales); foreach ($locales as $locale) { if (!empty($filters[$locale])) { $builder->addAnd($builder->expr()->field('translations.content')->equals(new \MongoRegex(sprintf('/%s/i', $filters[$locale])))->field('translations.locale')->equals($locale)); } } $ids = $qb->getQuery()->execute(); if (count($ids) > 0) { $builder->field('id')->in($ids); } } }