Как разбить коллекции на ресурсы Laravel API? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть таблица категорий, мне нужно выбрать все продукты, относящиеся к категории с разбивкой по категориям.

Код контроллера:

public function show($id)
{
    $category = Category::find($id);

    if($category){
        return  new ProductByCategoryResource($category);
    }

}

В ProductByCategoryResource:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;
use App\Http\Resources\ProductResource;

class ProductByCategoryResource extends JsonResource
{

    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'category_name'=> $this->category,
            'products'=> ProductResource::collection($this->products)
        ];
    }

}

Я привожу все продукты со многими во многие отношения между категорией и продуктом.

Теперь все хорошо с этим кодом и приносит все продукты , но Мне нужно разбить на страницы коллекция продуктов!

1 Ответ

1 голос
/ 21 марта 2020

Поместите это в метод boot в AppServiceProvider файл:

use Illuminate\Support\Collection;
use Illuminate\Pagination\LengthAwarePaginator;

Collection::macro('paginate', function($perPage, $total = null, $page = null, $pageName = 'page') {
        $page = $page ?: LengthAwarePaginator::resolveCurrentPage($pageName);

        return new LengthAwarePaginator(
            $this->forPage($page, $perPage),
            $total ?: $this->count(),
            $perPage,
            $page,
            [
                'path' => LengthAwarePaginator::resolveCurrentPath(),
                'pageName' => $pageName,
            ]
        );
    });

, затем просто используйте это в своем ресурсе:

'products'=> ProductResource::collection($this->products)->paginate(10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...