2013-05-17 24 views
0

使用原始SQL我習慣性地執行以下操作:使用Doctrine查詢生日當天ORM

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

但這些MONTH()DAY()功能並不適用於所有的數據庫工作=/

那麼,什麼是可以做到這一點與學說支持的任何數據庫工作的最好方法?

回答

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

您的擔心是使這項工作適用於任何suuported RDBM? 利用DatabasePlatform中的getSql()方法:

<?php 

public function getSql(SqlWalker $walker) 
{ 
    $walker->getConnection()->getDatabasePlatform(); // platform specific stuff 
} 
+0

感謝您的回覆@Florian。我只是不明白爲什麼Doctrine沒有標準的DQL函數,因爲所有的RDBM都支持這種類型的函數。 我正在創建[一個ZF2模塊](https://github.com/Danizord/DaniPerson)來抽象這個問題,並且我打算最終在Doctrine上實現這個DQL函數的pull請求。你怎麼看? – Danizord

+0

我認爲同樣的原因:http://stackoverflow.com/a/10762751/244058 – Florian