Sylius\Bundle\GridBundle\Doctrine\PHPCRODM\ExpressionVisitor::walkCompositeExpression PHP Метод

walkCompositeExpression() публичный Метод

{@inheritDoc}
public walkCompositeExpression ( Doctrine\Common\Collections\Expr\CompositeExpression $expr, Doctrine\ODM\PHPCR\Query\Builder\AbstractNode $parentNode )
$expr Doctrine\Common\Collections\Expr\CompositeExpression
$parentNode Doctrine\ODM\PHPCR\Query\Builder\AbstractNode
    public function walkCompositeExpression(CompositeExpression $expr, AbstractNode $parentNode)
    {
        switch ($expr->getType()) {
            case CompositeExpression::TYPE_AND:
                $node = $parentNode->andX();
                break;
            case CompositeExpression::TYPE_OR:
                $node = $parentNode->orX();
                break;
            default:
                throw new \RuntimeException('Unknown composite: ' . $expr->getType());
        }
        $expressions = $expr->getExpressionList();
        $leftExpression = array_shift($expressions);
        $this->dispatch($leftExpression, $node);
        $parentNode = $node;
        foreach ($expressions as $index => $expression) {
            if (count($expressions) === $index + 1) {
                $this->dispatch($expression, $parentNode);
                break;
            }
            switch ($expr->getType()) {
                case CompositeExpression::TYPE_AND:
                    $parentNode = $parentNode->andX();
                    break;
                case CompositeExpression::TYPE_OR:
                    $parentNode = $parentNode->orX();
                    break;
            }
            $this->dispatch($expression, $parentNode);
        }
        return $node;
    }