SELECT 使用 DQL 的案例 - Doctrine + Symfony 3
SELECT CASE with DQL - Doctrine + Symfony 3
实际上我有一个包含一些列的 table,但我需要过滤一些列,我需要的那 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
结果是 link 这个:
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();
但这会产生一个数组,并且我所有的视图都已准备好对象...如果我查询一个数组,我将需要更改很多页面。
有人可以帮我解决这个问题吗?谢谢!!
在 Symfony2 中它作为
$stmt = $em->getConnection();
$result = $stmt->executeQuery($query)->fetchAll();
希望对您有所帮助
不应该是:
$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();
请尝试一下。
实际上我有一个包含一些列的 table,但我需要过滤一些列,我需要的那 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
结果是 link 这个:
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();
但这会产生一个数组,并且我所有的视图都已准备好对象...如果我查询一个数组,我将需要更改很多页面。
有人可以帮我解决这个问题吗?谢谢!!
在 Symfony2 中它作为
$stmt = $em->getConnection();
$result = $stmt->executeQuery($query)->fetchAll();
希望对您有所帮助
不应该是:
$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();
请尝试一下。