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

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

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

以下代码的结果 SQL 选择了 all 个可能的字段并且 not COUNT(*):

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

然后我想起来了"CakePHP’s ORM offers abstraction for some commonly used SQL functions."。但是下面的代码导致 "Error: Function name must be a string":

$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;