public function testWhere() { $query = new Query(); $query->setMappingConfig($this->config); $query->from('Oro\\Bundle\\DataBundle\\Entity\\Product'); $query->where('or', 'all_data', '=', 'test', 'string'); $queryParams = $query->getOptions(); $this->assertEquals('or', $queryParams[0]['type']); $this->assertEquals('all_data', $queryParams[0]['fieldName']); }
public function testWhere() { $query = new Query(); $query->setMappingConfig($this->config); $query->from('Oro\\Bundle\\DataBundle\\Entity\\Product'); $query->where('or', 'all_data', '=', 'test', 'string'); $whereExpression = $query->getCriteria()->getWhereExpression(); $this->assertEquals('string.all_data', $whereExpression->getField()); $this->assertEquals(Comparison::EQ, $whereExpression->getOperator()); $this->assertEquals('test', $whereExpression->getValue()->getValue()); }
/** * Parse where statement * * @param Query $query * @param string $keyWord * @param string $inputString * * @return string */ private function where(Query $query, $keyWord, $inputString) { $typeWord = $this->getWord($inputString); if (!in_array($typeWord, $this->types)) { $typeWord = Query::TYPE_TEXT; } else { $inputString = $this->trimString($inputString, $typeWord); } //parse field name $fieldName = $this->getWord($inputString); $inputString = $this->trimString($inputString, $fieldName); //parse operator $operatorWord = $this->getWord($inputString); // check operator if (!in_array($operatorWord, $this->typeOperators[$typeWord])) { throw new \InvalidArgumentException('Type ' . $typeWord . ' does not support operator "' . $operatorWord . '"'); } $inputString = $this->trimString($inputString, $operatorWord); if (in_array($operatorWord, array(Query::OPERATOR_IN, Query::OPERATOR_NOT_IN))) { $fromString = $this->getWord($inputString, ')'); $inputString = $this->trimString($inputString, $fromString . ')'); $fromString = str_replace(array('(', ')'), '', $fromString); $value = explode(', ', $fromString); } else { if (substr($inputString, 0, 1) == '"') { $inputString = substr($inputString, 1, strlen($inputString)); $value = $this->getWord($inputString, '"'); $inputString = $this->trimString($inputString, $value . '"'); } else { $value = $this->getWord($inputString); $inputString = $this->trimString($inputString, $value); } } $query->where($keyWord, $fieldName, $operatorWord, $value, $typeWord); return $inputString; }