2015-04-07 11 views
6

In CakePHP 3, avevo un modello chiamato Articoli e un campo chiamato "soggetto", e mi sono imbattuto in un posto di blocco cercando di recuperare un elenco dei 100 soggetti degli articoli più comunemente usati.Come si usa COUNT (*) con find ('list') in CakePHP 3?

SQL risultante del seguente codice selezionato tutte i possibili campi e nonCOUNT(*):

$articles->find('list', [ 
    'keyField' => 'subject', 
    'valueField' => 'COUNT(*)' 
]) 
->group('subject') 
->order(['COUNT(*)' => 'DESC']) 
->limit(100) 
->toArray(); 

poi mi sono ricordato "CakePHP’s ORM offers abstraction for some commonly used SQL functions.". Ma il seguente codice ha provocato "Errore: Nome della funzione deve essere una stringa":

$countFunc = $this->find()->func()->count('*'); 
$articles->find('list', [ 
    'keyField' => 'subject', 
    'valueField' => $countFunc 
]) 
->group('subject') 
->order([$countFunc => 'DESC']) 
->limit(100) 
->toArray(); 

risposta

11

Fortunatamente, José mi soffiata a questo trucco, che funziona come un fascino:

$articles->find('list', [ 
    'keyField' => 'subject', 
    'valueField' => 'count' 
]) 
->select([ 
    'subject', 
    'count' => $this->find()->func()->count('*') 
]) 
->group('subject') 
->order(['count' => 'DESC']) 
->limit(100) 
->toArray(); 
+1

$ this-> Zendesks-> find ('list', ['keyField' => 'company_id', 'valueField' => 'comment_id']) -> dove (['created_at> =' => $ month3Start, 'created_at <=' => $ month1End]) -> selezionare (['company_id', 'comment_id' => $ this-> Zendesks-> find() -> func() -> count ('*')]) -> group ('company_id '); Basta copiare il mio lavoro qui, che può aiutare gli altri con maggiori dettagli. e grazie per il tuo codice! –

-1
$query = $articles->find(); 
    $query->select(['count' => $query->func()->count('*')]); 
    $StaticPages = $query->toArray(); 
    $StaticPagesCount = $StaticPages[0]->count; 
+0

Questo non usa 'find ('list')' o genera il conteggio dei gruppi. –