2012-12-16 15 views

cevap

35

Doctrine2'de NOW() yerine aşağıdakilerden birini kullanmanız gerekir.
Bu:

CURRENT_TIMESTAMP() 

Veya:

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

Eğer sadece zaman veya sadece tarih kullanımının onlardan biri istiyorsanız

: CURRENT_TIME() ve

Documentation can be found hereCURRENT_DATE(). Bu şekilde görünecektir

+0

Belgeler bağlantı raporları bulunamadı, lütfen güncelleyin. – wesamly

+0

Bu CURRENT_TIMESTAMP() işlevi benim için hiç çalışmadı. Bunun nasıl kullanıldığına dair bir örnek verebilir misiniz? Web sunucusunun zamanını, veritabanı yerine kullanmam. Ben her zaman ham SQL (hala bağlayıcı params) yazıyor ve sorgu oluşturucu devam ediyor. – ficuscr

+3

Ayrıca 'now', 'DateTime' için varsayılan paramdır, yani' new \ DateTime() 'olduğunu unutmayın. –

7

kullanma sorgu oluşturucu:

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

Not: Parametre sette ekstra tırnak CURRENT_TIMESTAMP() fonksiyon çalışma almak için gerekmiyor.

Veya sadece

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

Ikinci örnekte, daha küçük 'B.expiresAt> CURRENT_TIMESTAMP()' bir sorgu oluşturucu ifadesi kullanmak yerine ''' '' araması içinde doğrudan karşılaştırmasını kullanabilirsiniz. – Clamburger

+0

Veritabanının zamanını kullanmak istediğimi varsayalım sunucunun. Alternatif seçenekler [resultset mapper/native query] (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html) veya Doctrine ve Kendi Doktrini \ ORM \ Query \ AST \ Functions yazın. – ficuscr

İlgili konular