2012-12-16 2 views

답변

35

Doctrine2에서 NOW() 대신 다음 중 하나를 사용해야합니다.
이 :

CURRENT_TIMESTAMP() 

또는 :

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

만 시간이나 날짜 만 사용 그 중 하나하려면

: CURRENT_TIME()

Documentation can be found hereCURRENT_DATE(). 그것과 같을 것이다

+0

문서 링크 보고서를 찾을 수 없습니다, 업데이트하십시오. – wesamly

+0

이 CURRENT_TIMESTAMP() 일은 절대로 저에게 효과가 없었습니다. 어떻게 사용되는지 예를 들어 주시겠습니까? 데이터베이스 대신 웹 서버의 시간을 사용하는 것을 원하지 않습니다. 필자는 항상 원시 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

두 번째 예제에서, 쿼리 빌더 표현식을 사용하는 대신'B.expiresAt> CURRENT_TIMESTAMP()'비교를'where' 호출 내에서 직접 사용할 수 있습니다. – 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

관련 문제