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

如何在Livewire中为Group By后的查询结果实现分页?

解决Livewire中分组数据的分页问题

你的核心问题在于:直接对paginate()结果分组会丢失分页对象的方法,而先查询所有数据再分组又无法实现分页。正确的思路是先对分组维度(debitur_id)进行分页,再根据分页后的ID查询对应数据并分组,具体实现如下:

1. 修改getAllDokumen()方法

public function getAllDokumen()
{
    // 第一步:获取分页的debitur_id集合(按debitur数量分页,这里每页10个debitur)
    $paginatedDebiturs = Dokumen::select('debitur_id')
        ->distinct()
        ->paginate(10);

    // 第二步:根据分页后的debitur_id查询对应的所有文档并分组
    $groupedDokumen = Dokumen::whereIn('debitur_id', $paginatedDebiturs->pluck('debitur_id'))
        ->get()
        ->groupBy('debitur_id');

    // 第三步:将分组后的数据替换分页对象的默认集合
    $paginatedDebiturs->setCollection($groupedDokumen);

    return $paginatedDebiturs;
}

2. 前端视图无需大幅修改

因为返回的$allDokumen仍然是LengthAwarePaginator分页对象,原有循环和分页链接代码可以直接使用:

@foreach ($allDokumen as $dok)
    <tr>
        <td rowspan="11">{{ $loop->iteration }}</td>
        <td rowspan="11">{{ $dok->first()->debitur->no_debitur }}</td>
        <td rowspan="11">{{ $dok->first()->debitur->nama_debitur }}</td>
    </tr>
    @foreach (['PPJB', 'AJB', 'SKMHT', 'APHT', 'PH', 'SHT', 'IMB', 'Sertipikat', 'PK', 'CN'] as $jenis)
        @php
            $d = $dok->where('jenis', $jenis)->first();
        @endphp
        @if ($d)
            <tr>
                <td>{{ $jenis }}</td>
                <td>
                    @if ($d->status_pinjaman == 0)
                        Tersedia
                    @elseif ($d->status_keluar == 1)
                        Keluar
                    @elseif ($d->status_pinjaman == 1)
                        Dipinjam
                    @endif
                </td>
            </tr>
        @else
            <tr>
                <td>{{ $jenis }}</td>
                <td>Tidak Tersedia</td>
            </tr>
        @endif
    @endforeach
@endforeach

<div class="mt-4 items-center">
    {{ $allDokumen->links() }}
</div>

关键逻辑说明

  • 先对debitur_id去重分页:确保分页是按借款方(debitur)数量来划分,符合你分组展示的需求。
  • 替换分页对象的集合:保留LengthAwarePaginator的所有分页方法(如links()、currentPage()等),同时让分页对象承载分组后的文档数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 19:50:27