繁体   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