【问题标题】:How do you use COUNT(*) with find('list') in CakePHP 3?如何在 CakePHP 3 中使用 COUNT(*) 和 find('list')?
【发布时间】:2015-04-07 19:40:06
【问题描述】:

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

以下代码生成的 SQL 选择了所有可能的字段,不是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."。但是下面的代码导致“错误:函数名必须是字符串”:

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

【问题讨论】:

    标签: php cakephp cakephp-3.0


    【解决方案1】:

    幸运的是,José 向我提示了这个技巧,它就像一个魅力:

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

    【讨论】:

    • $this->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');只需将我的工作复制到这里,这可能会帮助其他人了解更多细节。并感谢您的代码!
    【解决方案2】:
        $query = $articles->find();
        $query->select(['count' => $query->func()->count('*')]);
        $StaticPages = $query->toArray();
        $StaticPagesCount = $StaticPages[0]->count;
    

    【讨论】:

    • 这不使用find('list') 或生成组数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2013-05-09
    • 2015-10-22
    相关资源
    最近更新 更多