0

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

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

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

那么,在 Doctrine 支持的任何数据库上工作的最佳方法是什么?

4

1 回答 1

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
}
于 2013-05-17T14:39:51.807 回答