【问题标题】:SELECT CASE with DQL - Doctrine + Symfony 3使用 DQL 选择案例 - Doctrine + Symfony 3
【发布时间】:2016-06-14 19:20:19
【问题描述】:

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

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

我用原始 SQL 做到了这一点

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

它会产生一些链接:

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

我正在尝试使用 DQL 方法达到相同的结果,但没有成功。我在原始 SQL 中执行此操作,但给出了一个数组:

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

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

有人可以帮我解决这个问题吗?谢谢!!

【问题讨论】:

    标签: doctrine symfony dql


    【解决方案1】:

    不应该是:

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

    请尝试一下。

    【讨论】:

      【解决方案2】:

      在 Symfony2 中它的工作原理是

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

      希望对你有帮助

      【讨论】:

      • 谢谢,但我需要在 DQL 中使用 RAW SQL 进行操作...但我需要更改项目的很多页面...
      猜你喜欢
      • 2020-02-29
      • 2013-01-02
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多