Laravel Pagination делает запись данных в двух экземплярах - PullRequest
1 голос
/ 06 июля 2019

Я использую разбиение на страницы Laravel для отображения набора записей по 6 записей на формат страницы. Первая страница отображаемого значения данных последней записи совпадает со второй страницей данных первой записи. На странице остатков обычно отображаются данные записи.

Этот пример отчета был отображен с разбивкой по страницам. Запись была повторена в строке 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

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>

Я пытался отобразить отчет без нумерации страниц. Дубликат проблемы не обнаружился. Этот пример отчета был отображен без нумерации страниц. Запись отображалась нормально.

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 голосов
/ 08 июля 2019

после того, как я попытался решить проблему в эти несколько дней.наконец-то нашел правильное решение.Просто добавьте -> orderBy ('fixedassets.assetid') на sql.Все отлично работает

0 голосов
/ 07 июля 2019

Я попытался воспроизвести проблему, используя предоставленные данные, но не смог (актив 'C0-06-0006' показан только один раз для меня), поэтому код, вероятно, в порядке.

Поэтому мое предположениеесть что-то с данными.Пожалуйста, проверьте, все ли имеют правильные идентификаторы, или таблицы содержат повторяющиеся записи.

К сожалению, недостаточно информации, чтобы быть уверенным.Если это не поможет, не могли бы вы предоставить сценарий CREATE TABLE и операторы для заполнения таблиц?

Это SQL-код, который Laravel генерирует для меня для второй страницы.Это может помочь найти проблему.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...