Cake\ElasticSearch\FilterBuilder::parse PHP Method

parse() public method

### Parsing a single array: {{{ $filter = $builder->parse([ 'name' => 'mark', 'age <=' => 35 ]); Equivalent to: $filter = [ $builder->term('name', 'mark'), $builder->lte('age', 35) ]; }}} ### Creating "or" conditions: {{{ $filter = $builder->parse([ 'or' => [ 'name' => 'mark', 'age <=' => 35 ] ]); Equivalent to: $filter = [$builder->or( $builder->term('name', 'mark'), $builder->lte('age', 35) )]; }}} ### Negating conditions: {{{ $filter = $builder->parse([ 'not' => [ 'name' => 'mark', 'age <=' => 35 ] ]); Equivalent to: $filter = [$builder->not( $builder->and( $builder->term('name', 'mark'), $builder->lte('age', 35) ) )]; }}} ### Checking for field existance {{{ $filter = $builder->parse([ 'name is' => null, 'age is not' => null ]); Equivalent to: $filter = [ $builder->missing('name'), $builder->exists('age') ]; }}} ### Checking if a value is in a list of terms {{{ $filter = $builder->parse([ 'name in' => ['jose', 'mark'] ]); Equivalent to: $filter = [$builder->terms('name', ['jose', 'mark'])] }}} The list of supported operators is: <, >, <=, >=, in, not in, is, is not, !=
public parse ( array | Elastica\Filter\AbstractFilter $conditions ) : array
$conditions array | Elastica\Filter\AbstractFilter The list of conditions to parse.
return array
    public function parse($conditions)
    {
        if ($conditions instanceof AbstractFilter) {
            return $conditions;
        }
        $result = [];
        foreach ($conditions as $k => $c) {
            $numericKey = is_numeric($k);
            $operator = strtolower($k);
            if ($numericKey) {
                $c = $this->parse($c);
                if (is_array($c)) {
                    $c = $this->__call('and', $c);
                }
                $result[] = $c;
                continue;
            }
            if ($operator === 'and') {
                $result[] = $this->__call('and', $this->parse($c));
                continue;
            }
            if ($operator === 'or') {
                $result[] = $this->__call('or', $this->parse($c));
                continue;
            }
            if ($operator === 'not') {
                $result[] = $this->not($this->__call('and', $this->parse($c)));
                continue;
            }
            if ($c instanceof AbstractFilter) {
                $result[] = $c;
                continue;
            }
            if (!$numericKey) {
                $result[] = $this->_parseFilter($k, $c);
            }
        }
        return $result;
    }