首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Doctrine2中使用SQL的年份()、月份()和日期()?

如何在Doctrine2中使用SQL的年份()、月份()和日期()?
EN

Stack Overflow用户
提问于 2013-09-16 11:28:33
回答 5查看 48.6K关注 0票数 40

我想执行一个查询,在本机SQL中如下所示:

代码语言:javascript
运行
复制
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的查询生成器中实现这一点,如下所示:

代码语言:javascript
运行
复制
$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,col 63:错误:预期的已知函数,得到“年份”

如何使用理论查询生成器实现我的查询?

备注:

  • 我知道原则的原生SQL的事。我尝试过这样做,但是它导致了一个问题:我的生产性数据库表和我的开发数据库表有不同的名称。我想工作数据库不可知论,所以这是没有选择。
  • 虽然我想使用数据库不可知论者: FYI,但我使用的是MySQL。
  • 有一种方法可以将原则扩展到“学习”YEAR()等语句,例如在这里看到的。但我正在寻找一种方法,以避免包括第三方插件。
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-10-16 10:09:32

如果您在Symfony上,可以添加学说延伸,这样就可以通过添加此配置来使用MySql、YEARMONTH语句:

代码语言:javascript
运行
复制
doctrine:
    orm:
        dql:
            string_functions:
                MONTH: DoctrineExtensions\Query\Mysql\Month
                YEAR: DoctrineExtensions\Query\Mysql\Year

现在,您可以在DQL或querybuilder中使用月和年语句。

注意:扩展支持MySQL、Oracle、PostgreSQL和SQLite。

票数 58
EN

Stack Overflow用户

发布于 2019-06-02 21:38:53

Symfony 4中,您必须安装DoctrineExtensions

代码语言:javascript
运行
复制
composer require beberlei/DoctrineExtensions

然后按照以下方式编辑原则配置文件( config /packages/prinine.yaml):

代码语言:javascript
运行
复制
doctrine:
    orm:
        dql:
            string_functions:
                MONTH: DoctrineExtensions\Query\Mysql\Month
                YEAR: DoctrineExtensions\Query\Mysql\Year
票数 14
EN

Stack Overflow用户

发布于 2015-08-05 13:33:37

口头/学说-扩展似乎也是一个不错的项目。

它同时支持MySQL和PostgreSql。目标是实现交叉DB

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18826836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档