Doctrine\ORM\Query\Parser::parse PHP Method

parse() public method

Parses a query string.
public parse ( ) : Doctrine\ORM\Query\ParserResult
return Doctrine\ORM\Query\ParserResult
    public function parse()
    {
        $AST = $this->getAST();

        if (($customWalkers = $this->_query->getHint(Query::HINT_CUSTOM_TREE_WALKERS)) !== false) {
            $this->_customTreeWalkers = $customWalkers;
        }

        if (($customOutputWalker = $this->_query->getHint(Query::HINT_CUSTOM_OUTPUT_WALKER)) !== false) {
            $this->_customOutputWalker = $customOutputWalker;
        }

        // Run any custom tree walkers over the AST
        if ($this->_customTreeWalkers) {
            $treeWalkerChain = new TreeWalkerChain($this->_query, $this->_parserResult, $this->_queryComponents);

            foreach ($this->_customTreeWalkers as $walker) {
                $treeWalkerChain->addTreeWalker($walker);
            }

            if ($AST instanceof AST\SelectStatement) {
                $treeWalkerChain->walkSelectStatement($AST);
            } else if ($AST instanceof AST\UpdateStatement) {
                $treeWalkerChain->walkUpdateStatement($AST);
            } else {
                $treeWalkerChain->walkDeleteStatement($AST);
            }
        }

        // Fix order of identification variables.
        // They have to appear in the select clause in the same order as the
        // declarations (from ... x join ... y join ... z ...) appear in the query
        // as the hydration process relies on that order for proper operation.
        if ( count($this->_identVariableExpressions) > 1) {
            foreach ($this->_queryComponents as $dqlAlias => $qComp) {
                if (isset($this->_identVariableExpressions[$dqlAlias])) {
                    $expr = $this->_identVariableExpressions[$dqlAlias];
                    $key = array_search($expr, $AST->selectClause->selectExpressions);
                    unset($AST->selectClause->selectExpressions[$key]);
                    $AST->selectClause->selectExpressions[] = $expr;
                }
            }
        }

        if ($this->_customOutputWalker) {
            $outputWalker = new $this->_customOutputWalker(
                $this->_query, $this->_parserResult, $this->_queryComponents
            );
        } else {
            $outputWalker = new SqlWalker(
                $this->_query, $this->_parserResult, $this->_queryComponents
            );
        }

        // Assign an SQL executor to the parser result
        $this->_parserResult->setSqlExecutor($outputWalker->getExecutor($AST));

        return $this->_parserResult;
    }

Usage Example

 /**
  * Calculates total count of query records
  *
  * @param Query $query
  * @param \Doctrine\Common\Collections\ArrayCollection|array|null $parameters Query parameters.
  * @return integer
  */
 public function getCount(Query $query, $parameters = null)
 {
     if (!empty($parameters)) {
         $query = clone $query;
         $query->setParameters($parameters);
     }
     $parser = new Parser($query);
     $parserResult = $parser->parse();
     $parameterMappings = $parserResult->getParameterMappings();
     list($sqlParameters, $parameterTypes) = $this->processParameterMappings($query, $parameterMappings);
     $statement = $query->getEntityManager()->getConnection()->executeQuery('SELECT COUNT(*) FROM (' . $query->getSQL() . ') AS e', $sqlParameters, $parameterTypes);
     $result = $statement->fetchColumn();
     return $result ? (int) $result : 0;
 }
All Usage Examples Of Doctrine\ORM\Query\Parser::parse
Parser