2015-04-07 14 views
6

W CakePHP 3, miałem model o nazwie Artykuły i pole o nazwie "temat", i natknąłem się na blokadę drogi, próbując znaleźć listę 100 najczęściej używanych tematów.Jak korzystać z COUNT (*) z find ("list") w CakePHP 3?

następujący kod wynikająca SQL wybrany wszystkie możliwych polach i nieCOUNT(*):

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

Wtedy przypomniałem "CakePHP’s ORM offers abstraction for some commonly used SQL functions.". Ale następujący kod spowodowało „Błąd: Nazwa funkcji musi być ciąg”:

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

Odpowiedz

11

szczęście José wyrzucenia mnie do tej sztuczki, która działa jak czar:

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

$ to-> Zendesks-> find ('list', ['keyField' => 'company_id', 'valueField' => 'comment_id']) -> where (['created_at> =' => $ month3Start, 'created_at <=' => $ month1End]) -> select (['company_id', 'comment_id' => $ this-> Zendesks-> find() -> func() -> count ('*')]) -> group ('company_id "); Po prostu skopiuj tutaj moją pracę, która może pomóc innym w uzyskaniu dalszych informacji i dzięki za twój kod! –

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

To nie używa 'find ('list')' ani nie generuje liczby grup. –

Powiązane problemy