thinkphp中分页paginate和group by一起使用时 代码异常的解决办法

1. paginate和group by报错,代码如下,月份分组
        $page = intval($where['page']);
        $limit = intval($where['limit']);
        $start_time = $where['start_time'];
        $end_time = $where['end_time'];

        $query = Db::table('eb_bonuslistlog')
            ->field('DATE_FORMAT(create_time,"%Y-%m") as date,SUM(money) as total_money,COUNT(*) as total_number')
            ->group('date')
            ->order('date desc');

        if ($start_time && $end_time) {
            $query->whereTime('create_time', 'between', [date('Y-m-01 00:00:00', strtotime($start_time)), date('Y-m-t 23:59:59', strtotime($end_time))]);
        }

  $list = $query->paginate(15);
        return $list;

2. 第一种写法,group by分组后使用page分页, 月份分组
        $page = intval($where['page']);
        $limit = intval($where['limit']);
        $start_time = $where['start_time'];
        $end_time = $where['end_time'];

        $query = Db::table('eb_bonuslistlog')
            ->field('DATE_FORMAT(create_time,"%Y-%m") as date,SUM(money) as total_money,COUNT(*) as total_number')
            ->group('date')
            ->order('date desc');

        if ($start_time && $end_time) {
            $query->whereTime('create_time', 'between', [date('Y-m-01 00:00:00', strtotime($start_time)), date('Y-m-t 23:59:59', strtotime($end_time))]);
        }

        $list = $query->page($page, $limit)
            ->select()
            ->toArray();

        return $list;
 3..第二种写法,group by分组后使用paginate分页,月份分组
        $page = intval($where['page']);
        $limit = intval($where['limit']);
        $start_time = $where['start_time'];
        $end_time = $where['end_time'];

        $query = Db::table('eb_bonuslistlog')
            ->field('DATE_FORMAT(create_time,"%Y-%m") as date,SUM(money) as total_money,COUNT(*) as total_number')
            ->group('date')
            ->order('date desc');

        if ($start_time && $end_time) {
            $query->whereTime('create_time', 'between', [date('Y-m-01 00:00:00', strtotime($start_time)), date('Y-m-t 23:59:59', strtotime($end_time))]);
        }

        $buildSql = $query->buildSql();

        $list = Db::table($buildSql)->alias('bs')->paginate(15);

        return $list->toArray();
4. group by分组后使用paginate分页,按天分组
  public function getZsyjDayReportStat(array $where)
    {
        $page = intval($where['page']);
        $limit = intval($where['limit']);
        $start_time = $where['start_time'];
        $end_time = $where['end_time'];

        // thinkphp中分页paginate和group by一起使用时代码异常,换下面写法
        $query = Db::table('eb_bonuslistlog')
            ->field('DATE_FORMAT(create_time,"%Y-%m-%d") as date,SUM(money) as total_money,COUNT(*) as total_number')
            ->group('date')
            ->order('date desc');

        if ($start_time && $end_time) {
            $query->whereTime('create_time', 'between', [$start_time . ' 00:00:00', $end_time . ' 23:59:59']);
        }

        $buildSql = $query->buildSql();

        $list = Db::table($buildSql)->alias('bs')->paginate(15);

        return $list->toArray();
    }

猜你喜欢

转载自blog.csdn.net/qq_32450471/article/details/132230571