예제 #1
0
 /**
  * {@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']);
 }
예제 #3
0
 /**
  * {@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);
         }
     }
 }