sql >> データベース >  >> RDS >> Mysql

DOctrine 2 DQL MySQLはROUND()と同等ですか?

    カスタムDQL関数 を実装する必要があります そのために。

    DoctrineExtensions にいくつかの例があります 。

    次のように実装できます:

    <?php
    
    namespace MyApp\DQL;
    
    use Doctrine\ORM\Query\AST\Functions\FunctionNode;
    use Doctrine\ORM\Query\Lexer;
    use Doctrine\ORM\Query\SqlWalker;
    
    class Round extends FunctionNode
    {
        private $arithmeticExpression;
    
        public function getSql(SqlWalker $sqlWalker)
        {
    
            return 'ROUND(' . $sqlWalker->walkSimpleArithmeticExpression(
                $this->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);
        }
    }
    

    その後、ORMのブートストラップ中に構成に登録できます:

    $config = new \Doctrine\ORM\Configuration();
    
    $config->addCustomNumericFunction('ROUND', 'MyApp\DQL\Round');
    


    1. SQLServer2012の列IDの増分が7番目のエントリで6から1000+にジャンプ

    2. Mysqlは列を分割できますか?

    3. 2つのエンティティ間の複数の関係、これは良い習慣ですか?

    4. MySQLで欠落している日付を埋める方法は?