Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kesalahan saat menggunakan fungsi DQL khusus dengan Doctrine dan Symfony2

Setelah beberapa pencarian, saya akhirnya menemukan solusinya. Saya memiliki dua masalah:pertama fungsi parse saya salah, kedua, saya memanggil fungsi SQL di orderBy saya (terima kasih Serat ).

Jadi, inilah kelas saya yang benar:

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

Dan sekarang, saya dapat menggunakan fungsi SQL 'CAST' dengan sempurna di repositori saya:

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

Salam hangat



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa tujuan dari character_set_connection?

  2. Cara Menginstal WordPress:Perangkat Lunak Server

  3. CakePHP 1.3 - Kolom tidak diketahui di mana klausa

  4. mengonfigurasi koneksi database dalam kerangka Yii

  5. host localhost tidak diizinkan untuk terhubung ke server MySQL ini