建立服務提供者
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
//引入這幾個類
use Illuminate\Pagination\Paginator;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
class CollectionMacroServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
if (!Collection::hasMacro('paginate')) {
//註冊巨集
Collection::macro('paginate',
function ($perPage = 15, $page = null, $options = []) {
//獲取當前頁
$page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
//初始化LengthAwarePaginator
return (new LengthAwarePaginator(
$this->forPage($page, $perPage), $this->count(), $perPage, $page, $options))
->withPath('');
});
}
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
在config/app.php的providers陣列中加入一行:
App\Providers\CollectionMacroServiceProvider::class,
使用:
collect([1,2,3,4,5,6])->paginate(5);
使用時如果提示 withPath 這個方法未定義,把這個方法刪除掉就可以了
集合分頁會遇到資料應該是陣列,但是返回的是物件,這樣來處理,因為集合排序後ID不是從0開始的
以下參考此文章:部落格:Laravel 的限制條數再分頁
$data = collect($sumData)->sortByDesc('i');
//傳入頁數,預設值為1
$page = $request->page ?? 1;
//每頁的條數
$perPage = $request->input('page_size', 10);
//計算每頁分頁的初始位置
$offset = ($page * $perPage) - $perPage;
//例項化LengthAwarePaginator類,並傳入對應的引數
$data = new LengthAwarePaginator(
array_values($data->slice($offset, $perPage)->toArray()), // 物件轉陣列參考:https://learnku.com/articles/15044
count($data),
$perPage,
$page,
['path' => $request->url(), 'query' => $request->query()]
);
本作品採用《CC 協議》,轉載必須註明作者和本文連結