如何在CakePHP 3中使用COUNT(*)和find(';list';)


How do you use COUNT(*) with find('list') in CakePHP 3?

在CakePHP 3中,我有一个名为Articles的模型和一个名"subject"的字段,在试图检索100个最常用的文章主题的列表时遇到了障碍。

以下代码的结果SQL选择了所有的可能字段,而不是COUNT(*):

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

然后我想起了"CakePHP的ORM为一些常用的SQL函数提供了抽象。"但是下面的代码导致了"错误:函数名称必须是字符串":

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

幸运的是,José向我透露了这个技巧,它就像一个符咒:

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