etwas sauberer Ansatz leicht unter Verwendung würde modifizierter @Ocramius-Code.
Dieses Stück Code in: src/YourNamespace/YourMainBundle/DoctrineFunctions/
Verzeichnis als Round.php
Dateiname:
<?php
namespace YourApp\YourMainBundle\DoctrineFunctions;
use Doctrine\ORM\Query\AST\Functions\FunctionNode,
Doctrine\ORM\Query\Lexer;
class Round extends FunctionNode
{
private $arithmeticExpression;
public function parse(\Doctrine\ORM\Query\Parser $parser)
{
$lexer = $parser->getLexer();
$parser->match(Lexer::T_IDENTIFIER);
$parser->match(Lexer::T_OPEN_PARENTHESIS);
$this->arithmeticExpression = $parser->SimpleArithmeticExpression();
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
{
return 'ROUND(' . $sqlWalker->walkSimpleArithmeticExpression($this->arithmeticExpression) . ')';
}
}
diese dann in Ihrem app/config/config.yml
setzen:
doctrine:
dql:
numeric_functions:
round: YourApp\YourMainBundle\DoctrineFunctions\Round
, dass Sie die ROUND()
Funktion direkt verwenden, würde es in Ihre DQL SELECT-Abfragen; egal ob mit QueryBuilder oder direkt über createQuery()
Ja, das wie der einzige Weg, es zu tun aussieht. Ich schätze die Anweisungen. – Shawn