Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd podczas używania niestandardowej funkcji DQL z Doctrine i Symfony2

Po kilku poszukiwaniach w końcu znalazłem rozwiązanie. Miałem dwa problemy:po pierwsze moja funkcja parsowania była błędna, po drugie wywołałem funkcję SQL w kolejnościBy (dziękuję Cerady ).

Oto moja właściwa klasa:

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 teraz mogę doskonale użyć funkcji SQL „CAST” w moim repozytorium:

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

Pozdrawiam



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmodyfikuj kolumnę Vs zmień kolumnę

  2. Dlaczego MySQL nie obsługuje precyzji w milisekundach/mikrosekundach?

  3. Jak upewnić się, że w bazie danych MySQL nie ma wyścigu podczas inkrementacji pola?

  4. Konwertuj datę z rrrr-mm-dd na dd nazwa_miesiąca rok

  5. #1136 – Liczba kolumn nie odpowiada liczbie wartości w wierszu 1