使用 distinct () 后用 分页 paginate 总数数据总数有误,求解

$result = $data->select('posts.id','posts.title'')->distinct()->paginate($page_size,['posts.id']);
直接get数据是188 但是paginate之后总数变成了193

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

思路一:手动分页
思路二: 自动分页之后, 再次进行手动分页(由于业务逻辑限制, 所以有了第二次手动分页(本人是不推荐的!))
思路一的手动分页功能有好多文章有写, 所以就不写了.

以下是思路二的代码:
我自己的案例代码如下:
// rows -- 查询构建器, 里边有各种查询条件

    if ((isset($queryData['assists']) && $queryData['assists'] == '是') || (isset($queryData['copy']) && $queryData['copy'] == '是')) {
        // 复制对象
        $assistsOrCopyRows = clone $rows;
    }

    $rows = $rows->orderBy('plans.created_at', 'desc')
        ->orderBy('plans.id')
        ->select(['plans.id'])
        ->paginate(
            @$queryData['per_page'] ?: 10,
            ['*'],
            'page',
            @$queryData['page'] ?: 1
        );

    // 协同计划, 抄送计划 需要重新进行手动分页, 因为有group By
    if ((isset($queryData['assists']) && $queryData['assists'] == '是') || (isset($queryData['copy']) && $queryData['copy'] == '是')) {

        // 为重新手动分页, 查询记录总数
        $total = DB::table(DB::raw("({$assistsOrCopyRows->select('plans.id')->toSql()}) as a"))
            ->mergeBindings($assistsOrCopyRows->getQuery())
            ->count('*');

        $queryData['per_page'] = (isset($queryData) && !empty($queryData['per_page'])) ? $queryData['per_page'] : 10;

        // 重新进行手动分页
        $rows = new LengthAwarePaginator($rows->toArray()['data'], $total, $queryData['per_page'] );

    }

    // 手动组装数据
    $rows = [
        'data' => $rows->toArray()['data'],
        'meta' => (new DataArraySerializer)->paginator(new IlluminatePaginatorAdapter($rows))
    ];
4年前 评论

使用paginate()第二个参数,指定列名
file

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!