2012-03-30 2 views
9

vorrei sapere come posso contare tutti i record di un'entità in un repository dottrinarecord conteggio dottrina della tabella

ho trovato questa soluzione, ma non sono sicuro se questo è un bene così:

public function findAllCounted() 
{ 
    return $this->getEntityManager() 
     ->createQuery('SELECT COUNT(a.id) FROM KSRArticleBundle:Article a') 
     ->getSingleScalarResult(); 
} 

migliori saluti, Bodo

risposta

11

non è necessario contare su un campo specifico, quindi questo farà:

+0

Grazie mille :) – bodokaiser

5

Solo per la cronaca, di solito è meglio contare sulla ID:

SELECT COUNT(a.id) FROM KSRArticleBundle:Article a 

è un po 'meglio

+0

Perché è meglio? – Chausser

+2

Poiché MySql non deve elencare tutte le informazioni sulle linee, conta solo gli id. È meglio in MyISAM, non so se si trova ancora su InnoDB. –

+0

+1 per il conteggio di .id - @Chausser Perché l'ID è indicizzato, quindi la query conta solo l'indice invece di tutte le righe di dati ... – Prof83

0

SQL permette anche questo:

SELECT COUNT(1) FROM KSRArticleBundle:Article a 

In questo modo il database fa non è nemmeno necessario recuperare i dati dalla tabella, che è ancora più veloce. Letteralmente quello che dice: seleziona il numero della costante '1' per ogni record. Aumento della velocità ridotto per server di database ben progettati e non è necessario ricordare nulla sulla tabella durante la scrittura di questo.