예제 #1
0
 /**
  * @param Parameters $params
  * @param Builder $queryBuilder
  *
  * @return Builder
  */
 public function createQuery($params, $queryBuilder)
 {
     $this->value = $params->toArray();
     /*
      * search jobs by keywords
      */
     if (isset($this->value['params']['search']) && !empty($this->value['params']['search'])) {
         $search = strtolower($this->value['params']['search']);
         $expression = $queryBuilder->expr()->operator('$text', ['$search' => $search]);
         $queryBuilder->field(null)->equals($expression->getQuery());
     }
     if (isset($this->value['params']['status']) && !empty($this->value['params']['status'])) {
         if ($this->value['params']['status'] != 'all') {
             $queryBuilder->field('status.name')->equals($this->value['params']['status']);
         }
     } else {
         $queryBuilder->field('status.name')->equals(Status::CREATED);
     }
     if (isset($this->value['params']['companyId']) && !empty($this->value['params']['companyId'])) {
         $queryBuilder->field('organization')->equals(new \MongoId($this->value['params']['companyId']));
     }
     if (isset($this->value['sort'])) {
         foreach (explode(",", $this->value['sort']) as $sort) {
             $queryBuilder->sort($this->filterSort($sort));
         }
     }
     return $queryBuilder;
 }
 /**
  * {@inheritdoc}
  */
 public function addFieldFilter($field, $operator, $value)
 {
     $field = sprintf("%s.%s.%s-%s", ProductQueryUtility::NORMALIZED_FIELD, 'completenesses', $this->context->getScopeCode(), $this->context->getLocaleCode());
     $value = intval($value);
     if ($operator === '=') {
         $this->qb->field($field)->equals($value);
     } else {
         $this->qb->field($field)->lt($value);
     }
     return $this;
 }
예제 #3
0
 public function addFilter(Builder &$qb, $id, $data)
 {
     switch ($data['comparator']) {
         case self::COMP_BEFORE:
             $qb->field($this->field)->lte($data['value']);
             break;
         case self::COMP_AFTER:
             $qb->field($this->field)->gte($data['value']);
             break;
     }
 }
 /**
  * {@inheritdoc}
  */
 public function addFieldFilter($field, $operator, $value)
 {
     $field = '_id';
     $value = is_array($value) ? $value : [$value];
     if ($operator === 'NOT IN') {
         $this->qb->field($field)->notIn($value);
     } else {
         $this->qb->field($field)->in($value);
     }
     return $this;
 }
 /**
  * {@inheritdoc}
  */
 public function addFieldFilter($field, $operator, $value)
 {
     $value = is_array($value) ? $value : [$value];
     $value = array_map('intval', $value);
     $field = 'groupIds';
     if ($operator === 'NOT IN') {
         $this->qb->field($field)->notIn($value);
     } else {
         $this->qb->field($field)->in($value);
     }
     return $this;
 }
예제 #6
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;
 }
예제 #7
0
 /**
  * {@inheritdoc}
  */
 public function addFieldFilter($field, $operator, $value)
 {
     $field = sprintf('%s.%s', ProductQueryUtility::NORMALIZED_FIELD, $field);
     if ('EMPTY' === $operator) {
         $this->qb->field($field)->exists(false);
     } elseif ('IN' === $operator) {
         $this->qb->field($field)->in($value);
     } else {
         if (strpos($value, '/') !== false) {
             $value = new \MongoRegex($value);
         }
         $this->qb->field($field)->equals($value);
     }
     return $this;
 }
예제 #8
0
 /**
  * @param   array $params
  * @param   QueryBuilder $queryBuilder
  * @return  mixed
  */
 public function createQuery($params, $queryBuilder)
 {
     if (isset($params['search']) && !empty($params['search'])) {
         $search = strtolower($params['search']);
         $expr = $queryBuilder->expr()->operator('$text', ['$search' => $search]);
         $queryBuilder->field(null)->equals($expr->getQuery());
     }
     if (isset($params['location']) && isset($params['location']->coordinates)) {
         $coordinates = $params['location']->coordinates->getCoordinates();
         $queryBuilder->field('preferredJob.desiredLocations.coordinates')->geoWithinCenter($coordinates[0], $coordinates[1], (double) $params['d'] / 100);
     }
     $queryBuilder->addOr($queryBuilder->expr()->field('permissions.view')->equals($this->user->getId()))->addOr($queryBuilder->expr()->field('status.name')->equals(Status::PUBLIC_TO_ALL));
     //$q = $queryBuilder->getQuery()->debug();
     return $queryBuilder;
 }
 /**
  * get a field condition to add to the querybuilder
  *
  * @param string $field name of field to get
  * @param bool   $expr  should i wrap this in expr()
  *
  * @return Builder|Expr
  */
 protected function getField($field, $expr)
 {
     if ($expr) {
         return $this->builder->expr()->field($field);
     }
     return $this->builder->field($field);
 }
 /**
  * @param QueryBuilder $qb
  * @param Criteria $criteria
  */
 protected function buildWhereClause(Builder $qb, Criteria $criteria)
 {
     foreach ($criteria as $key => $value) {
         if ($this->metadata->hasField($key) || $this->metadata->hasAssociation($key)) {
             $qb->field($key)->equals($value);
         }
     }
 }
예제 #11
0
 /**
  * {@inheritdoc}
  */
 public function addAttributeFilter(AbstractAttribute $attribute, $operator, $value)
 {
     list($data, $currency) = explode(' ', $value);
     $data = (double) $data;
     $field = ProductQueryUtility::getNormalizedValueFieldFromAttribute($attribute, $this->context);
     $field = sprintf('%s.%s', ProductQueryUtility::NORMALIZED_FIELD, $field);
     $field = sprintf('%s.%s', $field, $currency);
     $fieldData = sprintf('%s.data', $field);
     switch ($operator) {
         case '<':
             $this->qb->field($fieldData)->lt($data);
             break;
         case '<=':
             $this->qb->field($fieldData)->lte($data);
             break;
         case '>':
             $this->qb->field($fieldData)->gt($data);
             break;
         case '>=':
             $this->qb->field($fieldData)->gte($data);
             break;
         case 'EMPTY':
             $this->qb->field($fieldData)->equals(null);
             break;
         default:
             $this->qb->field($fieldData)->equals($data);
     }
     return $this;
 }
 protected function initTestList()
 {
     $this->queryBuilder->sort('date', 'DESC');
     $this->listCount = $this->queryBuilder->getQuery()->execute()->count();
     $this->initPagenation();
     if ($this->listCount > 0) {
         $this->queryBuilder->field('userId')->equals('');
         $this->list = $this->queryBuilder = $this->queryBuilder->getQuery()->execute();
     }
 }
 /**
  * {@inheritdoc}
  */
 public function addFieldFilter($field, $operator, $value)
 {
     $value = is_array($value) ? $value : [$value];
     if ($operator === 'NOT IN') {
         $this->qb->field($field)->notIn($value);
     } else {
         if (in_array('empty', $value)) {
             unset($value[array_search('empty', $value)]);
             $expr = new Expr();
             $expr = $expr->field($field)->exists(false);
             $this->qb->addOr($expr);
         }
         if (count($value) > 0) {
             $expr = new Expr();
             $expr->field($field)->in($value);
             $this->qb->addOr($expr);
         }
     }
     return $this;
 }
예제 #14
0
 public function addFilter(Builder &$qb, $id, $data)
 {
     switch ($data['comparator']) {
         case self::COMP_EQUALS:
             $qb->field($this->field)->equals($data['value']);
             break;
         case self::COMP_DOESNOTEQUAL:
             $qb->field($this->field)->notEqual($data['value']);
             break;
         case self::COMP_CONTAINS:
             $mongoregex = new \MongoRegex("/.*" . $data['value'] . ".*/i");
             $qb->field($this->field)->equals($mongoregex);
             break;
         case self::COMP_DOESNOTCONTAIN:
             $mongoregex = new \MongoRegex("/.*" . $data['value'] . ".*/i");
             $qb->field($this->field)->not($mongoregex);
             break;
         case self::COMP_STARTSWITH:
             $mongoregex = new \MongoRegex("/^" . $data['value'] . "/i");
             $qb->field($this->field)->equals($mongoregex);
             break;
         case self::COMP_ENDSWITH:
             $mongoregex = new \MongoRegex("/.*" . $data['value'] . "\$/i");
             $qb->field($this->field)->equals($mongoregex);
             break;
     }
 }
예제 #15
0
 /**
  * @param $params
  * @param \Doctrine\ODM\MongoDB\Query\Builder $queryBuilder
  *
  * @return mixed
  */
 public function createQuery($params, $queryBuilder)
 {
     if (!empty($params['text'])) {
         $queryBuilder->text($params['text']);
     }
     $queryBuilder->field('isDraft')->equals(false);
     if (isset($params['sort'])) {
         foreach (explode(",", $params['sort']) as $sort) {
             $queryBuilder->sort($this->filterSort($sort));
         }
     }
     return $queryBuilder;
 }
예제 #16
0
 /**
  * Creates a query for filtering organizations
  *
  * @see \Core\Repository\Filter\AbstractPaginationQuery::createQuery()
  * @param $params
  * @param \Doctrine\ODM\MongoDB\Query\Builder $queryBuilder
  * @return mixed
  */
 public function createQuery($params, $queryBuilder)
 {
     $userID = $this->auth->getUser()->getId();
     if ($params instanceof Parameters) {
         $value = $params->toArray();
     } else {
         $value = $params;
     }
     if (isset($params['text']) && $params['text']) {
         $queryBuilder->text($params['text']);
     }
     /*
      * We only show organizations to which the user has view permissions.
      */
     $queryBuilder->field('permissions.view')->equals($userID);
     if (!isset($value['sort'])) {
         $value['sort'] = '-date';
     }
     $queryBuilder->sort($this->filterSort($value['sort']));
     return $queryBuilder;
 }
예제 #17
0
 /**
  * {@inheritdoc}
  */
 public function innerJoin($join, $alias)
 {
     $this->queryBuilder->field($join)->notEqual(null);
     return $this;
 }
예제 #18
0
파일: Repository.php 프로젝트: php-lug/lug
 /**
  * @param Builder $queryBuilder
  * @param mixed[] $criteria
  */
 private function applyCriteria(Builder $queryBuilder, array $criteria = null)
 {
     foreach ($criteria as $property => $value) {
         if ($value === null) {
             $queryBuilder->field($this->getProperty($property, $queryBuilder))->equals(null);
         } elseif (is_array($value)) {
             $queryBuilder->field($this->getProperty($property, $queryBuilder))->in($value);
         } elseif ($value !== null) {
             $queryBuilder->field($this->getProperty($property, $queryBuilder))->equals($value);
         }
     }
 }
 /**
  * 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);
         }
     }
 }
예제 #20
0
 public function executeByDoctrineQuery(QueryBuilder $query)
 {
     // Hide deleted items
     $query->field('deleted')->equals(false);
     $this->applySearch($query);
     $this->applyFilters($query);
     $this->applyReduce($query);
     $this->applySort($query);
     // Calculate total count of items before applying the limits
     $this->total = $query->getQuery()->execute()->count();
     $query->skip($this->offset);
     $query->limit($this->amount);
     return $query->getQuery()->execute();
 }