使用 Doctrine ORM 查询当天的生日
Posted
技术标签:
【中文标题】使用 Doctrine ORM 查询当天的生日【英文标题】:Query birthdays of the day with Doctrine ORM 【发布时间】:2013-05-17 01:16:59 【问题描述】:使用原始 SQL,我习惯性地执行以下操作:
SELECT * FROM users WHERE MONTH(birthday) = 11 AND DAY(birthday) = 17
.
但是这些MONTH()
和DAY()
函数不适用于所有数据库=/
那么,在 Doctrine 支持的任何数据库中,最好的方法是什么?
【问题讨论】:
【参考方案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 功能。你怎么看?以上是关于使用 Doctrine ORM 查询当天的生日的主要内容,如果未能解决你的问题,请参考以下文章
使用 Doctrine ORM 的*** EXISTS 查询
如何在 Doctrine ORM 查询中查找与别名相关的表?