2012-05-14 18 views
13

Tengo una base de datos donde se almacena una "fecha de caducidad". Ahora quiero comparar la fecha actual con la fecha de caducidad almacenada. Si la fecha actual es anterior a la fecha de caducidad, los datos deben mostrarse como de costumbre, pero si los datos están caducados, quiero que se excluyan.¿Cómo puedo comparar una fecha con la fecha actual usando Doctrine 2?

me trataron:

$query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :date') 
    ->setParameters('date', 'now()'); 

Ayuda estaría bien, o algunos consejos si alguien entiende mi problema.

Respuesta

13

En este momento, usted está comparando expDate columna para el texto "ahora()", no al resultado de la función now().

$em->createQuery('SELECT d FROM test d WHERE d.expDate > CURRENT_DATE()'); 
+0

Mh ahora consigo una excepción que indica "Error: la función conocida esperado, consiguió 'ahora'" – Adi

+1

@Adi: Mi error. El nombre de la función es 'CURRENT_DATE()', no 'NOW()'. – Crozin

+0

'$ em-> createQuery ('SELECT d FROM test d WHERE d.expDate> NOW()');' –

26

Hay otra manera:

$query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :today') 
    ->setParameter('today', new \DateTime())-> 
+0

En caso de que alguien más se parezca a mí y no use 'createQuery', tenga en cuenta que el formato de Lo que se da como 'prueba 'arriba es un nombre de nombre completo de tu entidad. Por ejemplo 'SELECT m FROM MyProject \ Entities \ MyEntity m WHERE m ....'. ([ref] (http://docs.doctrine-project.org/en/2.1/reference/dql-doctrine-query-language.html)) – Sam

+0

Esto termina siendo algo más lento que 'CURRENT_DATE()', como en La respuesta de @ Crozin. – iisisrael

1

Usted puede utilizar la función de date para crear una cadena de compararse:

$query = $em->createQuery('SELECT d FROM test d'); 
$query->addWhere("d.exp_date > ?",date("Y-m-d", time())); 
1

En realidad, el camino funciona pero tiene una pequeño error en tu código.

que utilice:

$query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :date') 
->setParameters('date', 'now()'); 

Ahora puede cambiar por dos maneras para que funcione: 1. Deje el "s" en "setParameters" -> conjunto de parámetros

O

  1. utilizar matriz cuando se utiliza "parámetro s", en su caso:

    $query = $em->createQuery('SELECT d FROM test d WHERE d.expDate > :date') 
    ->setParameters(array('date' => 'now()');
Cuestiones relacionadas