2016-06-14 10 views
0

Eigentlich habe ich eine Tabelle mit einigen Spalten, aber ich brauche einige Spalten zu filtern, die 3 i `ll Notwendigkeit:SELECT CASE mit DQL - Lehre + Symfony 3

id | tipodemonstrativo | anoreferencia 
---+-------------------+-------------- 
01 | AN    | 2015 
02 | AN    | 2016 
03 | SE    | 2014 
04 | PB    | 2015 

ich dies mit roher SQL tat

SELECT anoreferencia, 
    CASE tipodemonstrativo 
     WHEN 'PB' THEN CONCAT(anoreferencia, '-03-31') 
     WHEN 'SE' THEN CONCAT(anoreferencia, '-06-30') 
     WHEN 'SB' THEN CONCAT(anoreferencia, '-09-30') 
     WHEN 'AN' THEN CONCAT(anoreferencia, '-12-31') 
    END AS referencia 
FROM demonstrativofinanceiro 
ORDER BY referencia DESC 
LIMIT 4 

Es ergibt sich etwas Link dieses:

id | referencia 
---+------------ 
01 | 2015-12-31 
02 | 2016-12-31 
03 | 2014-06-30 
04 | 2015-03-31 

I`m versucht gleiche Ergebnis zu erreichen mit DQL Ansatz, aber ohne succe ss. Ich tat dies in rohen SQL, sondern gibt ein Array:

$em = $this->getDoctrine()->getManager(); 
    $query = "SELECT *, 
     CASE tipodemonstrativo 
      WHEN 'PB' THEN CONCAT(anoreferencia, '-03-31') 
      WHEN 'SE' THEN CONCAT(anoreferencia, '-06-30') 
      WHEN 'SB' THEN CONCAT(anoreferencia, '-09-30') 
      WHEN 'AN' THEN CONCAT(anoreferencia, '-12-31') 
     END AS referencia 
    FROM demonstrativofinanceiro 
    ORDER BY referencia DESC 
    LIMIT 4"; 

    $stmt = $em->getConnection()->prepare($query); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(); 

Aber dieses Ergebnis in einem Array, und alle meine Ansichten war das Objekt fertig ... I `ll müssen viele Seiten ändern, wenn ich ein Array abfragen.

Kann mir jemand dabei helfen? Vielen Dank!!

Antwort

0

hilfreich sein sollte es nicht sein:

$query = $em->createQuery("SELECT *, 
     CASE tipodemonstrativo 
      WHEN 'PB' THEN CONCAT(anoreferencia, '-03-31') 
      WHEN 'SE' THEN CONCAT(anoreferencia, '-06-30') 
      WHEN 'SB' THEN CONCAT(anoreferencia, '-09-30') 
      WHEN 'AN' THEN CONCAT(anoreferencia, '-12-31') 
     END AS referencia 
    FROM demonstrativofinanceiro 
    ORDER BY referencia DESC 
    LIMIT 4"); 
$result = $query->getResult(); 

Versuchen Sie das mal bitte.

+0

Froh, dass es funktioniert hat! –

0

In Symfony2 arbeitet sie als

$stmt = $em->getConnection(); 
$result = $stmt->executeQuery($query)->fetchAll(); 

Ich hoffe, dass es

+0

Danke, aber ich muss es in DQL tun, mit RAW SQL habe ich ... aber ich werde viele Seiten des Projekts ändern müssen ... –