sql >> Databáze >  >> RDS >> Mysql

Chyba při použití vlastní funkce DQL s Doctrine a Symfony2

Po několika hledáních jsem konečně našel řešení. Měl jsem dva problémy:zaprvé byla moje funkce analýzy chybná, zadruhé jsem v orderBy zavolal funkci SQL (děkuji Cerad ).

Takže tady je moje správná třída:

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);
    }
}

A nyní mohu dokonale používat funkci SQL 'CAST' ve svém úložišti:

$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();

S pozdravem



  1. Nasazení a správa PostgreSQL 11:Novinka v ClusterControl 1.7.1

  2. Kumulativně přidejte chybějící data z předchozího měsíce nebo roku

  3. Hodnota dat v čase

  4. MySQL, zřetězit dva sloupce