簡體   English   中英

帶有SQL函數的Doctrine DQL查詢

[英]Doctrine DQL query with SQL functions

我正在將用CodeIgniter編寫的簡單Web應用程序移植到Symfony2包中。 我是Symfony2和Doctrine的新手,我遇到一個SQL查詢問題,我想在DQL中重寫。 我已准備好進入我的捆綁包,我已經創建了Entity類,我能夠將數據插入到數據庫中,並以Symfony2提供的面向對象編程方式進行簡單查詢。 不幸的是,我不知道如何在DQL中實現這個SQL查詢:

$sql = "SELECT * FROM t WHERE 
UNIX_TIMESTAMP(t.date) > ".(time()-300)." AND
ROUND(t.x,3) = ".round($x, 3);

正如您所看到的,有一些SQL函數調用需要在數據庫服務器上執行。 主義無法理解這種呼喚。 當然,我可以選擇退出使用Doctrine並使用我的Symfony2包中的基本PDO進行此查詢,但我想充分利用Symfony2和Doctrine。 因此,我希望以OOP方式完成此操作,或者使用能夠理解類似內容的智能DQL查詢:

$em->createQuery("SELECT t FROM MyTestBundle:MyEntity t WHERE t.x = :x")
->setParameter("x", round($x,3));

但是能夠將我的SQL查詢從舊應用程序重寫到我的新包是必須的。 請幫我找到正確的解決方案。

我知道我遇到的有點遲了但是如果這允許另一個人找到另一種解決方案:

使用bundle: Doctrine Extensions

配置config.yml之后:

doctrine:
    orm:
        dql:
            string_functions:
                UNIX_TIMESTAMP: DoctrineExtensions\Query\Mysql\UnixTimestamp

遺憾的是,您無法在DQL查詢中使用SQL函數。 所以你有兩個選擇:

  1. 您可以在DQL中創建用戶定義的函數。 以下是Doctrine如何執行此操作的官方文檔http://docs.doctrine-project.org/en/latest/cookbook/dql-user-defined-functions.html

  2. 或者您可以直接在doctrine中執行SQL查詢。 以下是在Doctrine中使用Native SQL的官方文檔http://docs.doctrine-project.org/en/latest/reference/native-sql.html

從問題的日期來看,我不認為這可以幫助你,但我希望它可以幫助那些有同樣問題的人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM