我想在本机 SQL 中执行一个如下所示的查询:
SELECT
AVG(t.column) AS average_value
FROM
table t
WHERE
YEAR(t.timestamp) = 2013 AND
MONTH(t.timestamp) = 09 AND
DAY(t.timestamp) = 16 AND
t.somethingelse LIKE 'somethingelse'
GROUP BY
t.somethingelse;
如果我试图在 Doctrine 的查询构建器中实现这一点,如下所示:
$qb = $this->getDoctrine()->createQueryBuilder();
$qb->select('e.column AS average_value')
->from('MyBundle:MyEntity', 'e')
->where('YEAR(e.timestamp) = 2013')
->andWhere('MONTH(e.timestamp) = 09')
->andWhere('DAY(e.timestamp) = 16')
->andWhere('u.somethingelse LIKE somethingelse')
->groupBy('somethingelse');
我得到错误异常
[语法错误] 第 0 行,第 63 列:错误:预期的已知函数,得到 'YEAR'
如何使用 Doctrines 查询生成器实现我的查询?
笔记:
- 我知道Doctrine 的 Native SQL。我已经尝试过了,但这会导致我的生产数据库表和我的开发数据库表具有不同的名称。我想与数据库无关,所以这是没有选择的。
- 虽然我想与 db 无关:仅供参考,我正在使用 MySQL。
- 有一种方法可以扩展 Doctrine 以“学习”
YEAR()
等语句,例如在这里看到的。但我正在寻找一种避免包含第三方插件的方法。