Example #1
0
 /**
  * Add "WHERE" parameter
  *
  * @deprecated Since 1.8 use criteria to add conditions
  *
  * @param string $keyWord
  * @param string $fieldName
  * @param string $condition
  * @param string $fieldValue
  * @param string $fieldType
  *
  * @return Query
  */
 public function where($keyWord, $fieldName, $condition, $fieldValue, $fieldType = self::TYPE_TEXT)
 {
     $expr = Criteria::expr();
     $fieldName = Criteria::implodeFieldTypeName($fieldType, $fieldName);
     switch ($condition) {
         case self::OPERATOR_CONTAINS:
             $expr = $expr->contains($fieldName, $fieldValue);
             break;
         case self::OPERATOR_NOT_CONTAINS:
             $expr = $expr->notContains($fieldName, $fieldValue);
             break;
         case self::OPERATOR_EQUALS:
             $expr = $expr->eq($fieldName, $fieldValue);
             break;
         case self::OPERATOR_NOT_EQUALS:
             $expr = $expr->neq($fieldName, $fieldValue);
             break;
         case self::OPERATOR_GREATER_THAN:
             $expr = $expr->gt($fieldName, $fieldValue);
             break;
         case self::OPERATOR_GREATER_THAN_EQUALS:
             $expr = $expr->gte($fieldName, $fieldValue);
             break;
         case self::OPERATOR_LESS_THAN:
             $expr = $expr->lt($fieldName, $fieldValue);
             break;
         case self::OPERATOR_LESS_THAN_EQUALS:
             $expr = $expr->lte($fieldName, $fieldValue);
             break;
         case self::OPERATOR_IN:
             $expr = $expr->in($fieldName, $fieldValue);
             break;
         case self::OPERATOR_NOT_IN:
             $expr = $expr->notIn($fieldName, $fieldValue);
             break;
         default:
             throw new ExpressionSyntaxError(sprintf('Unsupported operator "%s"', $condition));
     }
     if ($keyWord === self::KEYWORD_AND) {
         $this->criteria->andWhere($expr);
     } else {
         $this->criteria->orWhere($expr);
     }
     return $this;
 }
 /**
  * @param string $arrayFields
  * @param string $additionalField
  *
  * @return string
  */
 protected function combineFieldNames($arrayFields, $additionalField)
 {
     list($type, $field) = Criteria::explodeFieldTypeName($additionalField);
     $fieldsString = implode('|', array_merge(explode('|', Criteria::explodeFieldTypeName($arrayFields)[1]), [$field]));
     return Criteria::implodeFieldTypeName($type, $fieldsString);
 }
Example #3
0
 /**
  * @param null|string $whereType can be 'and' | 'or' | 'null'
  *
  * @return array
  *     key 0 -> type
  *     key 1 -> expression
  */
 protected function parseSimpleCondition($whereType = null)
 {
     $expr = Criteria::expr();
     if (null === $whereType) {
         $whereType = 'andWhere';
     } else {
         $whereType = sprintf('%sWhere', $this->stream->expect(Token::OPERATOR_TYPE, [Query::KEYWORD_AND, Query::KEYWORD_OR])->value);
     }
     if ($this->stream->current->test(Token::PUNCTUATION_TYPE)) {
         return [$whereType, $this->parseCompositeCondition()];
     }
     /**
      * We expecting that both field type and field name will be specified
      */
     $fieldTypeToken = $this->stream->expect(Token::STRING_TYPE, null, null, false);
     $fieldNameToken = $this->stream->expect(Token::STRING_TYPE, null, null, false);
     $fieldType = Query::TYPE_TEXT;
     if (!$fieldNameToken) {
         /**
          * If field type is not specified we got field name in first expect ($fieldTypeToken)
          */
         $fieldName = Criteria::implodeFieldTypeName($fieldType, $fieldTypeToken->value);
     } else {
         $fieldType = $fieldTypeToken->value;
         $fieldName = Criteria::implodeFieldTypeName($fieldType, $fieldNameToken->value);
     }
     /** @var Token $operatorToken */
     $operatorToken = $this->stream->expect(Token::OPERATOR_TYPE, $this->typeOperators[$fieldType], 'Not allowed operator');
     switch ($operatorToken->value) {
         case Query::OPERATOR_CONTAINS:
             $expr = $expr->contains($fieldName, $this->stream->current->value);
             break;
         case Query::OPERATOR_NOT_CONTAINS:
             $expr = $expr->notContains($fieldName, $this->stream->current->value);
             break;
         case Query::OPERATOR_EQUALS:
             $expr = $expr->eq($fieldName, $this->stream->current->value);
             break;
         case Query::OPERATOR_NOT_EQUALS:
             $expr = $expr->neq($fieldName, $this->stream->current->value);
             break;
         case Query::OPERATOR_GREATER_THAN:
             $expr = $expr->gt($fieldName, $this->stream->current->value);
             break;
         case Query::OPERATOR_GREATER_THAN_EQUALS:
             $expr = $expr->gte($fieldName, $this->stream->current->value);
             break;
         case Query::OPERATOR_LESS_THAN:
             $expr = $expr->lt($fieldName, $this->stream->current->value);
             break;
         case Query::OPERATOR_LESS_THAN_EQUALS:
             $expr = $expr->lte($fieldName, $this->stream->current->value);
             break;
         case Query::OPERATOR_IN:
             return [$whereType, $expr->in($fieldName, $this->parseArguments())];
         case Query::OPERATOR_NOT_IN:
             return [$whereType, $expr->notIn($fieldName, $this->parseArguments())];
         default:
             throw new ExpressionSyntaxError(sprintf('Unsupported operator "%s"', $operatorToken->value), $operatorToken->cursor);
     }
     $this->stream->next();
     return [$whereType, $expr];
 }