2013-06-17 11 views
8

Uso Symfony 2 e Doctrine. Nel mio database MySQL, ho un campo di tipo DateTime. Nel mio file di repository, utilizzando QueryBuilder, vorrei cercare in questa tabella solo per data (senza orario) e solo per ora (senza data), nella mia clausola Where.Cerca solo per ora nel campo DateTime in Symfony2 e Doctrine

Come posso realizzare questo?

+0

è possibile utilizzare query di natale e poi legarsi a un'entità – Nisam

risposta

16

È possibile estendere e registrare la funzione DATE() in doctrine2 per giocare con DQL. controllare questo solution.

Ora, se non si vuole che si estende Doctrine2, qui le mie soluzioni:

della ricerca in base alla data:

È possibile ottenere l'intervallo tra il datetime di inizio di un giorno e il datetime di Alla fine, rispondo già allo here.

Questa è la soluzione più pulita per la data (credo)!

Ora un'altra soluzione facile è quello di confrontare un campo datetime come una stringa con COME operatore, in modo da poter anche fare questo:

$query = $repository->createQueryBuilder('u')->where('u.createdAt LIKE :date') 
     ->setParameter('date', '2013-05-06%') 
     ->getQuery(); 

     $users = $query->getResult(); 

Ricerca sulla base di un'ora:

I don Conosciamo un'altra soluzione con DQL rispetto al confronto come stringa (a meno che non si estenda la doctrina con DATE), qui il codice:

$query = $um->getRepository()->createQueryBuilder('u')->where('u.createdAt LIKE :date') 
     ->setParameter('date', '____-__-__ 10:45:__') 
     ->getQuery(); 

Per ricordare, "_" (trattino basso) significa 1 carattere (e qualsiasi carattere!).

Scegli la soluzione;)

+0

La ringrazio molto per la risposta, è' è un genio, funziona perfettamente! Infine, estendo e registro la funzione DATE() e TIME(). Ho provato anche le altre soluzioni e tutto va bene! – JohnDoe66

3

Una parte del mio codice che funziona per me:

$qb->andWhere('s.createdAt LIKE :createdAt'); 
$qb->setParameter('createdAt', $startDate->format("Y-m-d") . "%");