首页 > 解决方案 > Laravel Pagination 使数据记录重复显示

问题描述

我正在使用 Laravel 分页以每页 6 条记录的格式显示记录集。显示的最后一条记录数据值的第一页与第一条记录数据的第二页相同。剩余页面正常显示记录数据。

此示例报告通过 laravel 分页显示出来。该记录在第 6 行和第 7 行重复显示。

No. Asset Id    Desc             Cost       Center Id  Requestor
1   CO-01-0001  Lenovo M720     3,500.00    2050001    David
2   CO-02-0002  Lenovo M720     3,500.00    2050001    David
3   CO-03-0003  Lenovo M720     3,500.00    2050001    Jack
4   CO-04-0004  Lenovo M720     3,500.00    2050002    Jack
5   C0-05-0005  Lenovo M720     3,600.00    2050002    Peter
6   C0-06-0006  Lenovo M720     3,600.00    2050003    Peter

<第1页>

No. Asset Id    Desc            Cost        Center Id   Requestor
7   C0-06-0006  Lenovo M720     3,600.00    2050003     Peter
8   CO-07-0007  Lenovo M720     3,500.00    2050004     David
9   CO-08-0008  Lenovo M720     3,500.00    2050005     Jack
10  CO-09-0009  Lenovo M720     3,500.00    2050006     Jack
11  C0-10-0010  Lenovo M720     3,600.00    2050007     Peter
12  C0-11-0011  Lenovo M720     3,600.00    2050008     Peter

<第2页>

我曾尝试在不分页的情况下显示报告。重复的问题没有出现。此示例报告在没有 laravel 分页的情况下显示出来。记录正常显示。

No. Asset Id    Desc            Cost        Center Id   Requestor
1   CO-01-0001  Lenovo M720     3,500.00    2050001     David
2   CO-02-0002  Lenovo M720     3,500.00    2050001     David
3   CO-03-0003  Lenovo M720     3,500.00    2050001     Jack
4   CO-04-0004  Lenovo M720     3,500.00    2050002     Jack
5   C0-05-0005  Lenovo M720     3,600.00    2050002     Peter
6   C0-06-0006  Lenovo M720     3,600.00    2050003     Peter
7   CO-07-0007  Lenovo M720     3,500.00    2050004     David
8   CO-08-0008  Lenovo M720     3,500.00    2050005     Jack
19  CO-09-0009  Lenovo M720     3,500.00    2050006     Jack
10  C0-10-0010  Lenovo M720     3,600.00    2050007     Peter
11  C0-11-0011  Lenovo M720     3,600.00    2050008     Peter

下面是我的示例控制器代码:

$assets = DB::table('Asset_Tracking.dbo.fixedassets')
            ->leftjoin('Asset_Tracking.dbo.userassets', function ($join) {
                $join->on('fixedassets.assetid', '=', 'userassets.assetid')
                        ->where('userassets.active', 1); })
            ->leftjoin('company.dbo.staff', 'userassets.staff_id', '=', 'staff.id')
            ->select('fixedassets.*', 'userassets.desc', 'userassets.cost', 'userassets.centerid'
            , 'staff.name')
            ->whereIn('userassets.centerid', $costcentarr)->paginate(6);

        $rank = $assets->firstItem();

        return view('asset.show', ['rank' => $rank, 'assets' => $assets]);

以下是我的示例刀片代码:

@foreach($assets as $asset)
<table class="table table-sm table-hover table-bordered"><tr>

<th><small>{{ $rank++ }}</small></th>
<th scope="row"><small>{{ $asset->assetid }}</small></th>
<td><small>{{ $asset->DESC }}</small></td>
<td><small>{{ $asset->COST }}</small></td>
<td><small>{{ $asset->centerid }}</small></td
<td><small>{{ $asset->name }}</small></td>

</tr>
@endforeach
</table>
{{ $assets->links() }}

我希望输出 11 条记录,但输出是 12 条记录,其中 1 条记录在第 6 行和第 7 行重复记录。感谢您的回复。

标签: phplaravel

解决方案


在我这几天尝试解决问题之后。终于找到了合理的解决方案。只需在 sql 上添加 ->orderBy('fixedassets.assetid ') 即可。一切正常。


推荐阅读