Cake\Database\Expression\TupleComparison::traverse PHP Method

traverse() public method

Callback function receives as its only argument an instance of an ExpressionInterface
public traverse ( callable $callable ) : void
$callable callable The callable to apply to sub-expressions
return void
    public function traverse(callable $callable)
    {
        foreach ($this->getField() as $field) {
            $this->_traverseValue($field, $callable);
        }
        $value = $this->getValue();
        if ($value instanceof ExpressionInterface) {
            $callable($value);
            $value->traverse($callable);
            return;
        }
        foreach ($value as $i => $val) {
            if ($this->isMulti()) {
                foreach ($val as $v) {
                    $this->_traverseValue($v, $callable);
                }
            } else {
                $this->_traverseValue($val, $callable);
            }
        }
    }

Usage Example

Exemplo n.º 1
0
 /**
  * Tests traversing
  *
  * @return void
  */
 public function testTraverse()
 {
     $value1 = new QueryExpression(['a' => 1]);
     $field2 = new QueryExpression(['b' => 2]);
     $f = new TupleComparison(['field1', $field2], [$value1, 2], ['integer', 'integer'], '=');
     $binder = new ValueBinder();
     $expressions = [];
     $collector = function ($e) use(&$expressions) {
         $expressions[] = $e;
     };
     $f->traverse($collector);
     $this->assertCount(4, $expressions);
     $this->assertSame($field2, $expressions[0]);
     $this->assertSame($value1, $expressions[2]);
     $f = new TupleComparison(['field1', $field2], [[1, 2], [3, $value1]], ['integer', 'integer'], 'IN');
     $expressions = [];
     $f->traverse($collector);
     $this->assertCount(4, $expressions);
     $this->assertSame($field2, $expressions[0]);
     $this->assertSame($value1, $expressions[2]);
 }