我想执行一个在本机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。我已经尝试过了,但是这导致了我的生产数据库表和开发数据库表使用不同名称的问题。我想与数据库无关,所以这是没有选择的。
尽管我想使用不可知论的数据库:仅供参考,我正在使用MySQL。
有一种方法可以扩展“教义”以“学习” YEAR()等语句,例如此处所示。但是我正在寻找一种避免包含第三方插件的方法。