You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CakePHP 3.x 如何统计指定日期范围内每个用户的总登录次数

实现方案

核心改造点

  • 替换原distinct去重逻辑为GROUP BY user_id分组统计,实现每个用户登录次数的计算
  • 增加请求参数读取和校验逻辑,动态拼接日期查询条件
  • 修正结束日期的时间边界,避免漏统计结束日期当天的登录数据

完整代码

public function index()
{
    $this->paginate = [
        'contain' => 'Users',
    ];
    // 读取GET请求中的日期参数
    $startDate = $this->request->getQuery('start_date');
    $endDate = $this->request->getQuery('end_date');

    $query = $this->Logins->find('all')
        ->select([
            'Logins.user_id',
            // 统计每个用户的登录次数,别名为login_count
            'login_count' => $this->Logins->func()->count('Logins.id')
        ])
        // 按用户ID分组,保证每个用户只返回一条记录
        ->group('Logins.user_id');
    
    // 校验并追加起始日期条件
    if ($startDate && strtotime($startDate)) {
        $query->where(['Logins.date >=' => date('Y-m-d 00:00:00', strtotime($startDate))]);
    }
    // 校验并追加结束日期条件
    if ($endDate && strtotime($endDate)) {
        $query->where(['Logins.date <=' => date('Y-m-d 23:59:59', strtotime($endDate))]);
    }

    $this->set('logins', $this->paginate($query));
}

使用说明

  • 前端请求时在查询参数中带入start_date和end_date即可,支持Y-m-d等常用日期格式
  • 统计得到的login_count字段会随用户信息一起返回,直接在视图层调用即可

提示:如果需要返回更多Users表的字段,可以在select中追加对应字段,也可以在contain配置中指定需要的关联字段,CakePHP会自动处理关联数据的映射。

内容的提问来源于stack exchange,提问作者Newbie_IT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 20:48:01