簡體   English   中英

自定義/擴展 laravel 分頁方式

[英]Custom/Extend laravel pagination method

我使用 vue 組件在刀片模板布局上顯示數據,例如分頁數據,這就是為什么我創建了一個方法來以我需要的形狀返回分頁數據,我想知道是否可以鏈接或覆蓋 laravel 分頁方法? 現在我正在這樣做,但我想擴展 laravel 查詢生成器或 laravel 用於分頁的任何類:

$posts = Post::latest()->with(['category','user'])->paginate($request->input('paginate', 6));

$posts = $this->getPagination($posts);

public function getPagination($results)
    {
        return 
        [
            'data' => $results,
            'pagination' => [
                'total' => $results->total(),
                'per_page' =>$results->perPage(),
                'current_page' => $results->currentPage(),
                'last_page' => $results->lastPage(),
                'from' => $results->firstItem(),
                'to' => $results->lastItem()
            ]
        ];    
    }


我想要類似的東西:

$posts = Post::paginate($request->input('paginate', 6))->getPaginatedData();

在構建 API 時,您可能需要一個位於 Eloquent 模型和實際返回給應用程序用戶的 JSON 響應之間的轉換層。 Laravel 的資源類允許你將模型和 model collections 轉換為 JSON。

然后你可以做這樣的事情......

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class Post extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Pagination\Paginator $result
     * @return array
     */
    public function toArray($request, $result)
    {
        return [
            'data' => $results,
            'pagination' => [
                'total' => $results->total(),
                'per_page' =>$results->perPage(),
                'current_page' => $results->currentPage(),
                'last_page' => $results->lastPage(),
                'from' => $results->firstItem(),
                'to' => $results->lastItem()
        ];
    }
}

根據您的問題,我只用一個名字放置 Post。 但是你可以做一些類似 Paginate 而不是 Post 的事情。 並通過此 api 資源傳遞所有模型。

例如:

class Paginate extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Illuminate\Pagination\Paginator $result
     * @return array
     */
    public function toArray($request, $result)
    {
        return [
            'data' => $results,
            'pagination' => [
                'total' => $results->total(),
                'per_page' =>$results->perPage(),
                'current_page' => $results->currentPage(),
                'last_page' => $results->lastPage(),
                'from' => $results->firstItem(),
                'to' => $results->lastItem()
        ];
    }
}

然后...

use App\Http\Resources\Paginate as PaginateResource;
use App\User;

Route::get('/user', function () {
    return new PaginateResource(User::paginate());
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM