2014-04-10 13 views
5

avere il codice seguente:Come ordinare varchar come int in Symfony2 Doctrine2?

$entity = $em->getRepository('MyBundle:MyEntity') 
    ->createQueryBuilder('q') 
    ->... 
    ->orderBy('q.varcharCol') 
    ->getQuery() 
    ->getResult(); 

varcharProp è una colonna varchar contenente valori quali: 10, 10a, 101, 20, 300, 20b, 21, 200. voglio ordinare mia entità da varcharProp ma rilasciandolo come intero e devo eseguire questo ordine all'interno della query perché sto limitando i risultati.

È possibile eseguire qualcosa di simile in Doctrine2?

entity->orderBy('ABS(q.varcharCol)') 

Oppure cambiare il tipo di colonna varcharProp?

+0

No, 'Prevista fine di corda, ha ottenuto '('', stesso errore utilizzando 'ABS' – viarnes

+1

Ah Se si aggiunge l'espressione al vostro. seleziona l'elenco, con un nome di colonna con alias, puoi ordinare l'indirizzo "orderBy()" – eggyal

+0

Come posso farlo usando 'createQueryBuilder'? – viarnes

risposta

7

Il modo migliore per avvicinarsi a questo è aggiungere un select con l'espressione orderBy come una colonna nascosta. Voglio dire:

$entity = $em->getRepository('MyBundle:MyEntity') 
    ->createQueryBuilder('q') 
    ->addSelect('ABS(q.varcharCol) AS HIDDEN foo') 
    ->... 
    ->orderBy('foo') 
    ->getQuery() 
    ->getResult(); 

Grazie alla @Qoop e @eggyal

+0

Great! Thank you! – Xander

Problemi correlati