使用DQL选择案例 - Doctrine + Symfony 3

时间:2016-06-14 19:20:20

标签: doctrine symfony dql

实际上我有一些包含一些列的表,但我需要过滤一些列,我需要这些列:

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

我用原始SQL

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

这会产生一些联系:

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

我试图用DQL方法达到相同的结果,但没有成功。我在原始SQL中做了这个,但给出了一个数组:

{{1}}

但是这会产生一个数组,我的所有视图都是对象准备好的...如果我查询数组,我需要更改大量的页面。

有人可以帮我吗?谢谢!

2 个答案:

答案 0 :(得分:0)

在Symfony2中,它可以作为

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

我希望它会有所帮助

答案 1 :(得分:0)

不应该是:

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

请试试。