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

DoctrineとSymfony2でカスタムDQL関数を使用するとエラーが発生します

    何度か検索した結果、ようやく解決策が見つかりました。 2つの問題がありました。1つは解析関数が間違っていた、2つ目はorderByでSQL関数を呼び出した(ありがとうセラド

    だから、これが私の正しいクラスです:

    namespace Ypok\YPoliceBundle\DQL;
    
    use Doctrine\ORM\Query\AST\Functions\FunctionNode;
    use Doctrine\ORM\Query\Lexer;
    use Doctrine\ORM\Query\SqlWalker;
    use Doctrine\ORM\Query\Parser;
    
    class CastFunction extends FunctionNode
    {
        public $firstDateExpression = null;
        public $unit = null;    
    
        public function parse(\Doctrine\ORM\Query\Parser $parser)
        {
            $parser->match(Lexer::T_IDENTIFIER);
            $parser->match(Lexer::T_OPEN_PARENTHESIS);
            $this->firstDateExpression = $parser->StringPrimary();
    
            $parser->match(Lexer::T_AS);
    
            $parser->match(Lexer::T_IDENTIFIER);
            $lexer = $parser->getLexer();
            $this->unit = $lexer->token['value'];
    
            $parser->match(Lexer::T_CLOSE_PARENTHESIS);
        }
    
        public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
        {
            return sprintf('CAST(%s AS %s)',  $this->firstDateExpression->dispatch($sqlWalker), $this->unit);
        }
    }
    

    これで、リポジトリでSQL関数「CAST」を完全に使用できるようになりました。

    $qb = $this->_em->createQueryBuilder();
    $qb->select('d, CAST(d.myField AS UNSIGNED) AS sortx')
       ->from('\Test\MyBundle\Entity\MyEntity', 'd')
       ->orderBy('sortx', 'ASC')
    
    return $qb->getQuery()->getResult();
    

    よろしく



    1. テーブルを書くためのSQLステートメント?

    2. Mysqlで増分バックアップを行う方法

    3. トランザクションの影響を受けないシーケンス?

    4. 64ビットアプリケーションをAcombaに接続する