Laravel 分页器总是在每一页上返回完整列表

Laravel Paginator always returning full list on every page

我不能再使用 paginate() 方法了,因为我需要为 collection 中的每个元素添加一个额外的属性。 结果是我在渲染时得到了正确的分页,但它总是在每一页上显示所有元素。

public function allPaginate($perPage)
{
    $initialCollection = $this->model->orderBy('created_at', 'desc')->get();

    // adding slug to my collection for every item
    $initialCollection->each(function ($item) {
        if(! isset($item->slug))
        {
            $slug = Str::slug($item->title);
            $item->slug = $slug;
        }
    });

    $result = new Paginator($initialCollection, count($initialCollection), $perPage);
    $result->setPath(Request::url());

    return $result;
}

在我使用之前:

$paginator = $this->model->orderBy('created_at', 'desc')->paginate($perPage);

我的数据库中有 3 个元素,我想每页显示 2 个。这是两个版本的转储。

应该是(使用 ->paginate())在 collection

中有 2 个项目

LengthAwarePaginator {#362 ▼

#总计:3

#lastPage: 2

#items: Collection {#364 ▼

#items: array:2 [▼

  0 => News {#365 ▶}

  1 => News {#366 ▶}

]

}

#每页:2

#currentPage: 1

#路径:“http://jv.app/nl/nieuws/

#查询:[]

#片段:空

#pageName: "page"

}

现在(使用新的 Paginator::make())在 collection

中有 3 个项目

LengthAwarePaginator {#358 ▼

#总计:3

#lastPage: 2

#items: Collection {#368 ▼

#items: array:3 [▼

  0 => News {#369 ▶}

  1 => News {#370 ▶}

  2 => News {#371 ▶}

]

}

#每页:2

#currentPage: 1

#路径:“http://jv.app/nl/nieuws

#查询:[]

#片段:空

#pageName: "page"

}

这里有什么问题?

Laravels Paginator class 期望传递当前页面的记录。

首先您需要获取当前页面的值。然后您需要更改查询以仅获取当前页面的记录:

// Get current page number
$page = 'Get this from the query string';

// Calculate the offset for current page
$offset = $perPage * ($page - 1);

// Get the records for the current page
$initialCollection = $this->model->orderBy('created_at', 'desc')->
                            skip($offset)->
                            take($perPage)->
                            get();

// Get total number of records in table
$totalRecords = $this->model->count();

// Paginate
$result = new Paginator($initialCollection, $totalRecords, $perPage);