2012-12-16 6 views

答えて

35

Doctrine2では、NOW()の代わりに次のいずれかを使用する必要があります。
この:

CURRENT_TIMESTAMP() 

または: CURRENT_TIME()CURRENT_DATE()

Documentation can be found here

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

あなただけの時間または日付のみの使用、これらのいずれかをしたい場合。

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

注:パラメータセットに余分な引用符がCURRENT_TIMESTAMP()機能の作業を取得するためにを要求されたクエリビルダを使用して

+0

ドキュメントリンクレポートが見つからない、更新してください。 – wesamly

+0

このCURRENT_TIMESTAMP()は今まで私にとってうまくいきませんでした。その使用方法の例を教えてください。私はWebサーバーの時間を使用するのではなく、データベースを使用することを心配していません。私はいつも生のSQL(依然としてバインディング・パラメータ)を書いて、クエリー・ビルダーを諦めてしまいます。 – ficuscr

+3

''now''は' DateTime'のデフォルトのparamですので、 'new \ DateTime()'で十分です。 –

7

が、それは次のようになります。

それとも単に

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

2番目の例では、クエリービルダー式を使用する代わりに 'whereex'呼び出しの中で短い' B.expiresAt> CURRENT_TIMESTAMP() '比較を直接使うことができます – Clamburger

+0

私はデータベースの時間を使うことを望んでいたと仮定します。サーバーの。代わりのオプションは、[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