Ver Mensaje Individual
  #2 (permalink)  
Antiguo 07/12/2011, 12:02
Avatar de maycolalvarez
maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: Symfony2 - Doctrine 2 (Agregar funciones de postgresql a una query en doct

recuerda que D2 tiene su propio lenguaje de consulta (DQL) por lo cual en el mismo no se estipulan sino funciones comunes, a modo de que puedas cambiar de DBMS, puedes usar 2 cosas: o native querys o definir una función definida para el AST de doctrine, por ejemplo yo definí:
Código PHP:
Ver original
  1. <?php
  2. namespace DoctrineCustomFunctions\Postgres;
  3.  
  4. use Doctrine\ORM\Query\AST\Functions\FunctionNode;
  5. use Doctrine\ORM\Query\Lexer;
  6.  
  7. /**
  8.  * ParseDateToChar = "to_char" "(" ArithmeticPrimary "," ArithmeticPrimary ")"
  9.  * Based to Benjamin Eberlei <[email protected]>
  10.  *
  11.  * @package         DoctrineCustomFunctions
  12.  * @subpackage      Postgres Custom Functions for Doctrine 2
  13.  * @author          Maycol Alvarez<[email protected]>
  14.  * @copyright       Maycol ALvarez
  15.  * @license         http://www.gnu.org/licenses/gpl-1.0.html
  16.  * @version         v1.0 28/09/2011 12:00 PM
  17.  */
  18. class ParseDateToChar extends FunctionNode
  19. {
  20.     // define las partes de la funcion
  21.     public $firstDateExpression = null;
  22.     public $secondStringExpression = null;
  23.  
  24.     // pasear la funcion y establecer las partes
  25.     public function parse(\Doctrine\ORM\Query\Parser $parser)
  26.     {
  27.         $parser->match(Lexer::T_IDENTIFIER);
  28.         $parser->match(Lexer::T_OPEN_PARENTHESIS);
  29.         $this->firstDateExpression = $parser->ArithmeticPrimary();
  30.         $parser->match(Lexer::T_COMMA);
  31.         $this->secondStringExpression = $parser->ArithmeticPrimary();
  32.         $parser->match(Lexer::T_CLOSE_PARENTHESIS);
  33.     }
  34.  
  35.     // devuelve el sql nativo
  36.     public function getSql(\Doctrine\ORM\Query\SqlWalker $sqlWalker)
  37.     {
  38.         return 'to_char(' .
  39.             $this->firstDateExpression->dispatch($sqlWalker) . ', ' .
  40.             $this->secondStringExpression->dispatch($sqlWalker) .
  41.         ')';
  42.     }
  43. }
y se registra al construir el EntityManager:

$doctrine_config->addCustomStringFunction('to_char', 'DoctrineCustomFunctions\\Postgres\\ParseDateToCha r');
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...