Laravel分页使数据记录重复显示

时间:2019-07-06 05:27:07

标签: php laravel

我正在使用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行重复记录。

2 个答案:

答案 0 :(得分:0)

我尝试使用提供的数据重现该问题,但无法进行(资产'C0-06-0006'仅对我显示一次),因此代码可能很好。

因此,我的猜测是数据有问题。请仔细检查所有内容是否具有正确的ID,或者表中是否包含重复的记录。

很遗憾,没有足够的信息来确定。如果这样做没有帮助,请您提供CREATE TABLE脚本和语句来填充表格吗?

这是Laravel为第二页为我生成的SQL。这可能有助于查找问题。

select fixedassets.*, userassets.desc, userassets.cost, userassets.centerid, staff.name 
from fixedassets 
left join userassets 
on fixedassets.assetid = userassets.assetid 
and userassets.active = 1 
left join staff on userassets.staff_id = staff.id 
where userassets.centerid in (2050001, 2050002, 2050003, 2050004, 2050005, 2050006, 2050007, 2050008) 
limit 6 offset 6

答案 1 :(得分:0)

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