2012-12-16 19 views

回答

35

在Doctrine2中,您必須使用以下其中一項代替NOW()
此:

CURRENT_TIMESTAMP() 

或者:

... 
createQuery(...'WHERE x.date = :now') 
->setParameter('now', new \DateTime('now')) 
... 

如果你想只有時間或只有日期使用其中的一個: CURRENT_TIME()CURRENT_DATE()

Documentation can be found here

+0

文檔鏈接的報道,請更新。 – wesamly

+0

這CURRENT_TIMESTAMP()的東西從來沒有爲我工作。你能提供一個如何使用它的例子嗎?我不想使用Web服務器的時間,而是使用數據庫。我總是最終編寫原始SQL(仍然綁定參數)並放棄查詢構建器。 – ficuscr

+3

另請注意''now''是'DateTime'的默認參數,所以'new \ DateTime()'就足夠了。 –

7

使用查詢生成器就應該是這樣的:

$qb 
    ->select('B') 
    ->from('RandomBundle:Banana', 'B') 
    ->where(
     $qb->expr()->gt('B.expiresAt', ':now') 
    ) 
    ->setParameter('now', '\'CURRENT_TIMESTAMP()\''); 

注:參數設置額外的報價是需要得到CURRENT_TIMESTAMP()功能工作。

或者乾脆找不到

$qb 
    ->select('B') 
    ->from('RandomBundle:Banana', 'B') 
    ->where(
     $qb->expr()->gt('B.expiresAt', 'CURRENT_TIMESTAMP()') 
    ); 
+0

在第二個示例中,您可以直接在「where」調用內使用較短的'B.expiresAt> CURRENT_TIMESTAMP()'比較,而不是使用查詢生成器表達式 – Clamburger

+0

我假定需要使用數據庫的時間,而不是某些前端Web服務器。備用選項是使用[resultset mapper/native query](http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html),或者擴展Doctrine和編寫你自己的Doctrine \ ORM \ Query \ AST \ Functions。 – ficuscr