【问题标题】:Query birthdays of the day with Doctrine ORM使用 Doctrine ORM 查询当天的生日
【发布时间】:2013-05-17 01:16:59
【问题描述】:

使用原始 SQL,我习惯性地执行以下操作:

SELECT * FROM users WHERE MONTH(birthday) = 11 AND DAY(birthday) = 17.

但是这些MONTH()DAY() 函数不适用于所有数据库=/

那么,在 Doctrine 支持的任何数据库中,最好的方法是什么?

【问题讨论】:

    标签: orm doctrine-orm dql


    【解决方案1】:

    要在 SQL 服务器级别进行此计算,您必须创建一些自定义 DQL 函数:

    http://www.doctrine-project.org/blog/doctrine2-custom-dql-udfs.html

    也看一下官方文档:

    http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#adding-your-own-functions-to-the-dql-language

    这是一个带有 postgresql DISTANCE 函数的示例:

    https://github.com/KnpLabs/DoctrineBehaviors/blob/master/src/Knp/DoctrineBehaviors/ORM/Geocodable/Query/AST/Functions/DistanceFunction.php

    您关心的是使这项工作适用于任何支持的 RDBM 吗? 在 getSql() 方法中利用 DatabasePlatform:

    <?php
    
    public function getSql(SqlWalker $walker)
    {
        $walker->getConnection()->getDatabasePlatform(); // platform specific stuff
    }
    

    【讨论】:

    • 感谢@Florian 的回复。我只是不明白为什么 Doctrine 没有标准的 DQL 函数,因为所有 RDBM 都支持这种类型的函数。我正在创建a ZF2 module 来抽象这个问题,并且我打算最终在 Doctrine 上提出拉取请求来实现这个 DQL 功能。你怎么看?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 2013-02-25
    • 2013-03-11
    相关资源
    最近更新 更多